AuthComponentを使ってユーザー認証の仕組みを追加することができます。パスワード情報はハッシュ化して扱います。有効期間はセッションに関する設定(Session.timeoutとSecurity.level)に従います。また、このコンポーネントには自動ログイン機能は含まれていませんが次ページ以降で説明します。


ページ遷移は次のようになります。

  1. ログインが必要なページAにアクセス
  2. ログインページへリダイレクト(users/login,$loginAction属性で設定可能)
  3. ログイン・フォームを送信
  4. ログイン直前のページ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');
    }
}

CakePHP Note (v1.3)

Index