CakePHP

Authコンポーネントを使った認証

とりあえず、簡単に、コントローラにAuthコンポーネント利用を宣言。 お試しに、defaultコントローラに書いてみた。

$components = array('Auth');

で、データベースに認証用のテーブルを作成。

create table users (
   id  int serial,
   username char(50) not null unique,
   password char(50) not null,
   primary key (id)
);

あと、Usersコントローラも作る。

<controllers/users_controller.php>--------------
<?php
class UsersController extends AppController {
    var $name = 'Users';
    var $components = array('Auth');
    function login() {
    }
    function logout() {
      $this->redirect($this->Auth->logout());
    }
}
?>

こんだけ。

 で、テストのためにusersテーブルにエントリを入れておこうとしたのだが、passwordフィールドには、SHA1ハッシュの値を入れないといけない。

 コマンドラインにて、sha1 -s 'password' として得られたハッシュ値を入れてみたところ、認証を通らない。

 もしかしてmd5が使われているかもしれないと思い、md5 -s 'password' としても同じ。

 ライブラリを追ってみると、authコンポーネントはidentificationにSecurity::hash()と言うメソッドを呼び出していたので、そのファイル(cake/libs/security.php)を見てみたら、

if ($salt) {
    $string = Configure::read('Security.salt') . $string;
}

って書いてあった。 config/core.phpに書いた(初期セットアップの時に書き換えておくのを推奨されてる)、Security.saltの値の後ろにパスワード平文文字列をくっつけてからハッシュ関数に渡してるみたい。

 よって、usersテーブルに格納するパスワードハッシュ値も、同様にしてあげれば良い。

sha1 -s 'saltpassword'

 と言った具合に作ったものを使う。

 これでやってみたら、正しく認証処理が出来た。

 ここで躓いて、結構時間食った。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS