認証
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');
}
}