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 文字列
null
利用するデータベース接続の名前。 db.php の config ファイルでの名称と一致させる必要があります。 null でデフォルトの DB インスタンスを使います。
table_name 文字列
'users'
利用するユーザ情報を定義したテーブル名。
table_columns 配列
array('*')
ユーザ情報のテーブルのうち、 select するカラムのリスト。 '*' で全カラムを select 。少なくとも、 'username', 'password', 'email', 'last_login', 'login_hash', 'group', 'profile_fields' を含んでいる必要があります。
guest_login 論理型
true
true の場合、ログイン中のユーザがいなければ、ダミーの 'guest' ユーザが作成されます。これを使うことで、 ログインしていないユーザに対しても Group ドライバと ACL ドライバが利用できます。
groups 配列
array()
SimpleAuth Group ドライバで利用する定義済みの Group 。詳細な Group 配列については、 こちらを参照。
roles 配列
array()
SimpleAuth ACL ドライバで利用する定義済みの ACL 。詳細な ACL 配列については、 こちらを参照。
login_hash_salt 文字列
'put_some_salt_in_here'
SimpleAuth で利用されるパスワードをよりセキュアにするために、パスワードのハッシュ値をデータベースに保存する際に、サルトが使われています。 デフォルトのものから、ランダムな文字列に変更することを忘れないように! パスワードのハッシュ化にあたり、 SimpleAuth は非常にセキュアな機構である PBKDF2 を利用しています。
username_post_key 文字列
'username'
ログインフォームのユーザ名を入力するフィールド名。
password_post_key 文字列
'password'
ログインフォームのパスワードを入力するフィールド名。

データベーステーブル

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);
}