10月 172012
 

こんばんは。ファガイです。
今日は、Authパッケージ(SimpleAuth)についてまとめてます。
何か参考になれば良いなと思います。

Authパッケージについて

まず、Authパッケージを利用するには。Config.phpでのauthパッケージの指定が必要です。

'packages' => array(
    'orm',
    'auth',
),

こうですね。ormがコメントアウトになってるかもですが、外しておいて損は無いでしょう。

また、今回はSimpleAuthを前提としてます。ほかのAuth用のパッケージは他の方が公開されていますが、今回はSimpleAuth。なぜなら簡単だからです。

SimpleAuthのための初期設定

まず、SimpleAuthを使うためには以下のテーブルが必要です。

CREATE TABLE `users` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `username` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
    `password` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
    `group` INT NOT NULL DEFAULT 1 ,
    `email` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
    `last_login` VARCHAR( 25 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT 0,
    `login_hash` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
    `profile_fields` TEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
    `created_at` INT( 11 ) UNSIGNED NOT NULL ,
    UNIQUE (
        `username` ,
        `email`
    )
)

このテーブルはログイン情報を保持するテーブルとして、必須事項となっています。もしかしたらどこかでカラムの追加ができないかなとかたまに思います。

次に、一応ですがソルト値の変更をやっておきましょう。これはパスワード等をハッシュ化するために必要な文字列で、この文字列が初期状態だとハッシュ化することにあまり意味を持たなくなる。

まず、packages/auth/config内のauth.phpとsimpleauth.phpをAPPPATH/config/内にコピーします。
そしてauth.phpではsaltキーの値を任意の文字列に変更します。
simpleauth.phpではlogin_hash_saltキーの値を任意の文字列に変更。

ユーザグループの設定

simpleauth.phpを開いたのでついでに変更します。
simpleauth.phpの’groups’の項目を確認します。

'groups' => array(
    /**
     * Examples
     * ---
     *
     * -1   => array('name' => 'Banned', 'roles' => array('banned')),
     * 0    => array('name' => 'Guests', 'roles' => array()),
     * 1    => array('name' => 'Users', 'roles' => array('user')),
     * 50   => array('name' => 'Moderators', 'roles' => array('user', 'moderator')),
     * 100  => array('name' => 'Administrators', 'roles' => array('user', 'moderator', 'admin')),
     */
)

このコメントアウトを外しておきます。

'groups' => array(
      -1   => array('name' => 'Banned', 'roles' => array('banned')),
      0    => array('name' => 'Guests', 'roles' => array()),
      1    => array('name' => 'Users', 'roles' => array('user')),
      50   => array('name' => 'Moderators', 'roles' => array('user', 'moderator')),
      100  => array('name' => 'Administrators', 'roles' => array('user', 'moderator', 'admin')),        
)

こちらのgroupsという項目はユーザのグループを管理するためにあります。この例であればgroupが-1だとBanned、つまり禁止のグループに入っています。現状で確認する限りはこのnameや、rolesは自分で勝手に設定しても良さそうです。nameは、グループ名で、rolesは役割です。(rolesは取得する際にも利用するのでわかりやすい名前にしておくと良いかもですね)

基本。

authを使うには、authのインスタンスを生成しなくてはいけません。

$auth = Auth::instance();

Auth::instance()メソッドを利用すると、authオブジェクトが返されます。

ユーザの登録方法。

ユーザの登録には、create_userメソッドを使用します。

create_user()メソッド
第1引数:username(必須)
第2引数:password(必須)
第3引数:email(必須)
第4引数:group(初期値は1)
第5引数:profile_fields(配列での指定。)

登録出来ると、登録したユーザのレコードのidが返されます。ユーザが登録出来ない時には、falseが返されます。

ログイン方法

ログインにはlogin()メソッドを使用します。

login()メソッド
第1引数:usernameまたはemail(必須)
第2引数:password(必須)

ログイン出来たら、true。出来なかったらfalse。ちなみに、これとは別にvalidate_userメソッドというものがありますが、loginメソッドを使うとメソッド内で呼ばれていました。(validate_userメソッドは検証用のメソッドです。)

$auth = Auth::instance();
if($auth->login(Input::post('username'), Input::post('password')))
{
    //ログイン成功!
}
else
{
    //ログイン失敗・・・
}

こんな感じです。Input使ったのは慣れるためです。ログインに失敗した時はリダイレクトとかしたらいいかもですね。
ちなみに、ログアウトをする場合にはインスタンス作って、$auth->logout()をするだけです。簡単。

ログイン状態のチェック方法

そのユーザがログイン中かどうかを調べるにはAuth::check()メソッドを使います。
また、check()がtrueであれば色々なAuthのメソッドが有効になります。

ユーザ名の取得

ユーザ名を取得する際は、Auth::get_screen_name()メソッドで取得ができます。

ユーザIDの取得

ユーザIDを取得する際は、Auth::get_user_id()メソッドで取得ができます。ちなみに、get_user_id()メソッドの場合、ドライバ名を第1要素、ログインIDを第2要素とした配列が返されます。list等で受け取るといいかもです。

list($driver, $user_id) = Auth::get_user_id();
グループチェック

最初の設定で行ったグループを判定するには、Auth::member(グループ番号)でチェックができます。

こんなところでしょうかね。
この他にも、get_roles()メソッドで役割毎に表示内容を変更したり等できますね。ログインチェック関係はbeforeメソッドにまとめておきたいですね。

Pocket

 Posted by at 11:36 PM

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>


*