SimpleAuth - はじめに

Simpleauth is, as it's name implies, a simple authentication system which is included in the Auth package. Besides being a working Auth implementation, it is also an example for other Auth drivers. You can use this as a reference when building your own driver.

Auth のセットアップ

Configuration starts with telling the Auth package that you are going to use the Simpleauth driver. This is done through the auth.php configuration file. A default file is provided in the Auth package. You should copy this file to your app/config folder before making any changes. The default file is already configured for the Simpleauth package. You will find an explaination of this config file here.

上記の後に、パッケージをオートロードするかどうかを app/config/config.php の always_load セクションで指定します。

ACL's

SimpleAuth には、以下の ACL の仕組みをサポートしている ACL ドライバが付属しています:

When checking for access, you specify the required access as either role.right (when you want to check for a single right, or role.[right,right] when you want to check for multiple rights at once. This is an AND check, so when you specify multiple rights, the user must have ALL of them assigned to be granted access.

設定

The Simpleauth authentication system is configured through a configuration file, not suprisingly called 'simpleauth.php'. A default file is provided in the Auth package. You should copy this file to your app/config folder before making any changes.

下記の設定値が定義されています:

パラメータ デフォルト 説明
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' ユーザーが作成されます。 誰もログインしていない場合でさえグループと ACL のドライバを使用することが可能となります。
remember_me array
array(
	'enabled' => false,
	'cookie_name' => 'rmcookie',
	'expiration' => 86400*31
)
Configuration for the Simpleauth 'remember_me' functionality
multiple_logins boolean
false
If true multiple concurrent logins of the same user are allowed. If false, when a user logs in, any previous login will be cancelled. Note that enabling this will disable some login session hijacking measures!
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'
ログインフォームのパスワードを入力するフィールド名。

If you want to use the 'remember-me' functionality, make sure you have a valid Crypt configuration, as it uses an encrypted cookie to store the user information to be remembered.

データベーステーブル

SimpleAuth は単一のテーブルに依存しています。 Auth パッケージにはこのテーブルを作成するために必要なマイグレーションファイルが含まれています。
oil refine migrate --packages=auth を実行すればあなたのために作成されたテーブルを持つことができます。

これはログイン処理のサンプルです:

public function action_login()
{
	$data = array();

	// もし、あなたが送信ボタンを押下したならば、ステップを超えてへ行こう。
	if (Input::post())
	{
		// 資格を確認。これは前述のテーブルが作成され、
		// 上記のようにテーブルの定義および設定を使用していることが前提となります。
		if (Auth::login())
		{
			// 認証情報は OK 、ただちに下記へ
			Response::redirect('success_page');
		}
		else
		{
			// おっと!あなたにはあげれません。 再度ログインしてみてください。 username フィールドを再設定し、
			// ビューに戻っていくつかのエラーテキストを与えるためにいくつかの値を設定します。
			$data['username']    = Input::post('username');
			$data['login_error'] = 'Wrong username/password combo. Try again';
		}
	}

	// ログインフォームを表示
	echo View::forge('auth/login',$data);
}