ZendFrameworkでBasic認証 既にあるものを利用した編

( ZendFramework )

以前、Zendでベーシック認証を自作したエントリーがありましたが、本当は Zendに用意されているプラグインがあるのです。

なぜ利用しなかったっていうと、Zend側での必須項目としてrealmを必ず 指定しなければいけないのでです。それだとユーザ名とパスワードの認証情報 に対応しないので必ずエラーになってしまいます。

ベーシック認証としては「Zend_Auth_Adapter_Http_Resolver_File」のクラスが 当てはまるのでしょうね。このクラスに認証に必要なファイルをセットする。 Zendの認証用のAdapterを生成して、このクラスに実際の処理をさせていく感じですかね。

        $config = array(
            'accept_schemes'  => 'basic',      // basic認証
            'realm'           => 'aaaaa',      // realm(ベーシック認証のフォームに出力されます)
            'digest_domains'  => '/login',     // どのURL以下にベーシック認証をかけるかです。
            'nonce_timeout'   => 3600
        );

        $resolver = new Zend_Auth_Adapter_Http_Resolver_File();
        $resolver->setFile('passwd.txt');

        $adapter  = new Zend_Auth_Adapter_Http($config);
        $adapter->setBasicResolver($resolver)
                ->setRequest($this->getRequest())
                ->setResponse($this->getResponse());

        $result = $adapter->authenticate();
        if (!$result->isValid()) {
            // 認証エラーの場合
        }

passwd.txtは、ドキュメントルート(index.phpがあるところ)からのパスになります。 内容はこんな感じです

test:aaaaa:hogehoge
ユーザ名:realm:パスワード

realmはプログラム内で指定したrealmと一致している必要があります。

前回書いたものよりだいぶスマートに実装されていますね。感心感心です。 ちょっとわがままいうなら認証機構をもっと昔のにも親和性高くしてほしかったなと思います。

まぁでも勉強になったのでよしとします。