認証
AuthComponentを使ってユーザー認証の仕組みを追加することができます。パスワード情報はハッシュ化して扱います。有効期間はセッションに関する設定(Session.timeoutとSecurity.level)に従います。また、このコンポーネントには自動ログイン機能は含まれていませんが次ページ以降で説明します。
ページ遷移は次のようになります。
- ログインが必要なページAにアクセス
- ログインページへリダイレクト(users/login,$loginAction属性で設定可能)
- ログイン・フォームを送信
- ログイン直前のページAへリダイレクト
具体的には以下の作業を行います。
- コントローラにAuthComponentを組み込む
- AuthComponentの設定をする
- ログイン/ログアウト用のアクションとビューを用意する
コントローラにAuthComponentを組み込む
ユーザー認証が必要なコントローラの$component属性に'Auth'をセットするだけで利用できます。
class FoosController extends AppController { var $components = array('Auth'); }
すべてのコントローラでユーザー認証を有効にするにはAppControllerの$component属性に'Auth'をセットします。
class AppController extends Controller { var $components = array('Auth'); }
AuthComponentの設定をする
AuthComponentがデフォルトで参照するデータベースのテーブルは、id,username,passwordという名前のカラムを含むusersテーブルとなっています。別のテーブルやカラム名を使いたいときは、AuthComponentの属性を使って変更できます。
class UsersController extends AppController { var $components = array("Auth"); function beforeFilter() { $this->Auth->userModel = 'Member';//Memberモデルを使用してmembersテーブルを参照する } }
この他にもいくつかの設定可能な項目があります。
ログイン/ログアウト用のアクションとビューを用意する
ログイン/ログアウト用のコントローラーを作成します。$components属性に‘Auth’を設定します。コントローラの中から$this->Authで参照できるようになります。
class UsersController extends AppController { var $components = array("Auth"); }
ログインとログアウト用のアクションを追加します。
class UsersController extends AppController { var $components = array("Auth"); function login() { //1. ログイン用フォームを表示する($this->dataが空の場合、あるいはID/パスワードが間違っていた場合) //2. ユーザー認証する($this->dataに値がセットされている場合) } function logout() { $this->Session->setFlash('ログアウトしました');//必要に応じて $this->redirect($this->Auth->logout());//ログアウトし、ログイン画面へリダイレクト } }
ログイン用のビューを作成します。app/view/users/login.ctp
echo $form->create('User', array( 'action' => 'login')); echo $form->input('username'); echo $form->input('password'); echo $form->end('Login');
利用方法2
特定のアクションをユーザー認証なしで許可する場合は、allowメドッドで許可します。
class FoosController extends AppController { var $components = array('Auth'); function beforeFilter(){ parent::beforeFilter(); $this->Auth->allow('index','view'); } }