SimpleAuth - はじめに
SimpleAuth は、その名前が示すように、Auth パッケージに含まれているシンプルな認証システムです。 機能する Auth の実装としてだけでなく、他の Auth ドライバの例の意味もあります。 自作ドライバを作るときの参考として利用できます。
Auth のセットアップ
設定は、 Auth パッケージに SimpleAuth ドライバの使用を通知することからはじまります。 これには auth.php の config ファイルを利用します。デフォルトのファイルが Auth パッケージで用意されています。 このファイルをコピーし、自分の app/config フォルダに入れてください。中身の変更はその後に行います。デフォルトのファイルは、 SimpleAuth パッケージ向けに設定されています。こちらに config ファイルについての説明があります。
上記の後に、パッケージをオートロードするかどうかを app/config/config.php の always_load セクションで指定します。
設定
SimpleAuth 認証システムの設定は config ファイル、当然のことながら 'simpleauth' config ファイルで行います。 デフォルトのファイルが Auth パッケージに用意されています。 このファイルをコピーし、自分の app/config フォルダに入れてください。 中身の変更はその後に行います。
下記の設定値が定義されています:
パラメータ | 型 | 規定値 | 説明 |
---|---|---|---|
db_connection | 文字列 |
|
利用するデータベース接続の名前。 db.php の config ファイルでの名称と一致させる必要があります。 null でデフォルトの DB インスタンスを使います。 |
table_name | 文字列 |
|
利用するユーザ情報を定義したテーブル名。 |
table_columns | 配列 |
|
ユーザ情報のテーブルのうち、 select するカラムのリスト。 '*' で全カラムを select 。少なくとも、 'username', 'password', 'email', 'last_login', 'login_hash', 'group', 'profile_fields' を含んでいる必要があります。 |
guest_login | 論理型 |
|
true の場合、ログイン中のユーザがいなければ、ダミーの 'guest' ユーザが作成されます。これを使うことで、 ログインしていないユーザに対しても Group ドライバと ACL ドライバが利用できます。 |
groups | 配列 |
|
SimpleAuth Group ドライバで利用する定義済みの Group 。詳細な Group 配列については、 こちらを参照。 |
roles | 配列 |
|
SimpleAuth ACL ドライバで利用する定義済みの ACL 。詳細な ACL 配列については、 こちらを参照。 |
login_hash_salt | 文字列 |
|
SimpleAuth で利用されるパスワードをよりセキュアにするために、パスワードのハッシュ値をデータベースに保存する際に、サルトが使われています。 デフォルトのものから、ランダムな文字列に変更することを忘れないように! パスワードのハッシュ化にあたり、 SimpleAuth は非常にセキュアな機構である PBKDF2 を利用しています。 |
username_post_key | 文字列 |
|
ログインフォームのユーザ名を入力するフィールド名。 |
password_post_key | 文字列 |
|
ログインフォームのパスワードを入力するフィールド名。 |
データベーステーブル
SimpleAuth ひとつのテーブルのみに依存します。 Auth パッケージには、 example フォルダに、このテーブル向けのマイグレーションファイルを用意しています。
このファイルをマイグレーション先のフォルダにコピーし、 oil refine migrate
を実行すれば、テーブルが作成されます。
例
これはログイン処理のサンプルです:
public function action_login()
{
$data = array();
// submit ボタンが押されました。処理を追っていきます
if (Input::post())
{
// まず、 Auth オブジェクトを取得します
$auth = Auth::instance();
// 認証情報をチェックします。ここでは、テーブルが作成済みで、
// 上記で記載した通りのテーブル定義を行なっているものと仮定します。
if ($auth->login())
{
// 認証情報は OK 、ただちに下記へ
Response::redirect('success_page');
}
else
{
// 残念、おめーの席ねえから!(訳注:原文は Oops, no soup for you) 再度ログインを。
// ビューにユーザ名を戻し、エラーメッセージを渡すために、いくつかの値をセット。
$data['username'] = Input::post('username');
$data['login_error'] = 'Wrong username/password combo. Try again';
}
}
// ログインフォームを表示
echo View::forge('auth/login',$data);
}