SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Zend Frameworkでユーザーアカウントを管理する

ユーザーアカウント機能実装に役立つ強力なZend_Authコンポーネント

  • X ポスト
  • このエントリーをはてなブックマークに追加

ユーザーログイン機能を作成する

 すべての準備が整ったので、ここからはいよいよ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コンポーネントを使用すれば、ユーザーアカウントの管理は非常に簡単になります。このチュートリアルを通じて、ユーザー別のカスタムコンテンツへのアクセスを実現するための基本を理解していただければ幸いです。

参考資料

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

W. Jason Gilmore(W. Jason Gilmore)

オハイオ州コロンバスに本社を置く出版・コンサルティング企業であるW.J. Gilmore, LLCの創設者。最新のプロジェクトに、PHP言語の学習用ワンストップショップEasyPHPWebsites.comがある。以前はApressのオープンソース系編集者として60冊を超える書籍の出版に携わり、オープンソース製品に関する優れた出版物の刊行に貢献。著作も多く、ベストセラーになった『Beginning PHP and MySQL: From Novice to Professional』(現在は第3版)、『Beginning PHP and PostgreSQL: From Novice to Professional』、『Beginning PHP and Oracle: From Novice to Professional』などがある。年1回の開発者向けカンファレンス「CodeMash」を主催する非営利組織CodeMashの共同創設者。2008 MySQL Conferenceの発表者選考委員会のメンバーも務めた。Developer.com、Linux Magazine、TechTargetなどの著名なサイトに執筆したチュートリアルや記事の数は100以上にのぼる。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4706 2010/01/12 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング