データベースのテーブルでの認証導入Zend_Auth_Adapter_DbTable は、 データベースのテーブルに保存された証明情報に基づいた認証の機能を提供します。 Zend_Auth_Adapter_DbTable のコンストラクタには Zend_Db_Adapter_Abstract のインスタンスを渡す必要があるので、 各インスタンスは特定のデータベース接続に関連付けられます。 コンストラクタではその他の設定オプションも指定できます。 これらは個別にインスタンスメソッドで指定することもできます。 次のような設定オプションが使用可能です。
Example #1 基本的な使用法 導入部で説明したとおり、Zend_Auth_Adapter_DbTable のコンストラクタには Zend_Db_Adapter_Abstract のインスタンスを渡す必要があります。これは、認証アダプタのインスタンスと 関連付けるデータベース接続を表します。 まず、データベース接続を作成する必要があります。 次のコードは、メモリ内データベースのアダプタを作成し、 簡単なテーブルスキーマを作成し、そして後で認証クエリを実行するための行を追加します。 この例を実行するには、PDO SQLite 拡張モジュールが有効になっている必要があります。
データベース接続およびテーブルが使用可能となったので Zend_Auth_Adapter_DbTable のインスタンスが作成できます。 設定オプションの値は、コンストラクタで渡すか、 あるいはインスタンスを作成した後に設定用メソッドで指定します。
この時点で、認証アダプタのインスタンスは認証クエリを受け付ける準備ができました。 認証クエリを処理するには、入力された証明情報をアダプタに渡してから authenticate() メソッドをコールします。
認証結果オブジェクトでの getIdentity() メソッドに加え、Zend_Auth_Adapter_DbTable は認証の成功時にテーブルの行を取得する機能もサポートしています。
テーブルの行には証明情報が含まれているので、 予期せぬアクセスからその内容を守ることが重要となります。 応用例: 持続的な DbTable 結果オブジェクトデフォルトでは Zend_Auth_Adapter_DbTable は、 認証に成功した際に認証情報を返します。場合によっては、 Zend_Auth の持続ストレージの仕組みを利用して 別の有用な情報を格納したいこともあるでしょう。その場合は、 getResultRowObject() メソッドを使用して stdClass オブジェクトを返します。 次のコードで、使用法をご確認ください。
高度な使用例Zend_Auth (そして Zend_Auth_Adapter_DbTable) の主な目的は 認証 (authentication) であって 認可 (authorization), ではありませんが、認可にもかかわる問題も多少あります。 問題によっては、認証アダプタの中で認可にかかわる問題を解決することもあるでしょう。 ちょっとしたおまけとして Zend_Auth_Adapter_DbTable に組み込まれている仕組みを使用すると、 認証時にありがちな問題を解決するチェックを加えることができます。
もうひとつの例として、salt メカニズムの実装を見てみましょう。 salt とは、アプリケーションのセキュリティを格段に向上させるテクニックを指す用語です。 パスワードにランダムな文字列を連結することで、 辞書を用いた総当たり攻撃からパスワードを保護するという仕組みになっています。 salt 文字列を格納するために、テーブルの構造を変更する必要があります。
すべてのユーザに対して登録時に salt 文字列を生成するシンプルな方法を示します。 それではアダプタを作成してみましょう。
もうひとつの方法は、アダプタを作成したあとで Zend_Auth_Adapter_DbTable の getDbSelect() メソッドを使うことです。 このメソッドが返す Zend_Db_Select オブジェクトのインスタンスで authenticate() を実行します。このメソッドは、 authenticate() をコールしたかどうかにかかわらず同じオブジェクトを返すことに注意しましょう。 このオブジェクトには識別や認証のための情報は含まれておらず、 authenticate() によってそれらが組み込まれます。 getDbSelect() メソッドを使いたくなるひとつの例としては、 たとえばユーザの状態のチェック、 つまりそのユーザアカウントが有効になっているかどうかの確認などがあります。
|