ユーザーログイン機能を作成する
すべての準備が整ったので、ここからはいよいよZend_Authコンポーネントの出番です。Zend_Authにはさまざまな機能があり、このメカニズムを利用することで、ユーザーが入力したログイン認証情報(通常は電子メールアドレスとパスワード)を確認し、ユーザーが現在Webサイトにログインしているかどうかを判定するためのセッションを開始できます。例えば、ユーザーに電子メールアドレスとパスワードを入力してもらう典型的なログインフォームがあるとします。次のログインアクションでは、Zend_Authコンポーネントを使用して、このログイン処理を行います。
01 public function loginAction() 02 { 03 04 if ($this->getRequest()->isPost()) { 05 06 $email = $this->_request->getPost('email'); 07 $password = $this->_request->getPost('password'); 08 09 if (empty($email) || empty($password)) { 10 $this->view->errors[] = "Please provide your e-mail address and password."; 11 } else { 12 13 $db = Zend_Db_Table::getDefaultAdapter(); 14 $authAdapter = new Zend_Auth_Adapter_DbTable($db); 15 16 $authAdapter->setTableName('account'); 17 $authAdapter->setIdentityColumn('email'); 18 $authAdapter->setCredentialColumn('pswd'); 19 $authAdapter->setCredentialTreatment('MD5(?)'); 20 21 $authAdapter->setIdentity($email); 22 $authAdapter->setCredential($password); 23 24 $auth = Zend_Auth::getInstance(); 25 $result = $auth->authenticate($authAdapter); 26 27 // Did the participant successfully login? 28 if ($result->isValid()) { 29 30 $this->_redirect('/'); 31 32 } else { 33 $this->view->errors[] = "Login failed. Have you confirmed your account?"; 34 } 35 36 } 37 38 } 39 }
このコードの内容を見ていきましょう。
- 16行目では、アカウント情報を格納するために使用するテーブルの名前を設定しています。この例では、テーブル名は
account
です。 - 17行目では、ユーザーの「ログインID」を含むテーブル列を定義しています。ここでは電子メールアドレスを使用するため、
email
を設定しています。 - 18行目では、ユーザーのパスワードを含むテーブル列を定義しています。
- 19行目では、テーブル内でパスワードを処理する方法を定義します。ここではパスワードのハッシュに
md5()
関数を使用したため、認証情報処理方法(credential treatment)をそのように設定しています。 - 21行目と22行目では、入力された電子メールアドレスとパスワードを、アダプタの
identity
およびcredential
プロパティに代入しています。 - 24行目では、ユーザーが既にログインしているかどうかを判定します。ログインしていない場合は、
authenticate()
メソッドを使用して認証を試みます。 - 最後に、入力された認証情報が正しいかどうかを判定するために、
isValid()
メソッドを使用しています。正しければ、ユーザーをホームページへとリダイレクトします。正しくなければ、ログインページにエラーメッセージが表示されます。
ユーザーがログインしているかどうかを判定する
Zend_AuthのgetIdentity()
メソッドを使用すれば、ユーザーがログインしているかどうかを簡単に判定できます。
$user = Zend_Auth::getInstance()->getIdentity();
この呼び出し文をコントローラのinit()
メソッドなどに挿入することで、ユーザーがログインしているかどうかを判定できます。$user
が設定されれば、$user
オブジェクトの、例えば電子メールやID属性を参照することにより、そのユーザーの電子メールアドレスやプライマリーキーを取得できます。
ログアウト機構を作成する
最後に、ユーザーがサイトからログアウトできるようにするには、インスタンスログアウト用のアクションを作成し、このアクションをハイパーリンクのリンク先にします。
public function logoutAction() { Zend_Auth::getInstance()->clearIdentity(); $this->_redirect('/'); }
まとめ
強力なZend_Authコンポーネントを使用すれば、ユーザーアカウントの管理は非常に簡単になります。このチュートリアルを通じて、ユーザー別のカスタムコンテンツへのアクセスを実現するための基本を理解していただければ幸いです。
参考資料
- Zend_Authコンポーネント:Zend FrameworkのZend_Authコンポーネントのドキュメント
- Zend_Sessionコンポーネント:Zend FrameworkのZend_Sessionコンポーネントのドキュメント
- PHPのセッション処理機能:PHPマニュアルのセッション処理に関するドキュメント