便利な機能「SimpleAuth」でサクッと簡単なログイン機能を実装してみようと思います。
FuelPHPのバージョンは1.7.1です。
公式ドキュメントはこちらです。
1. Authのセットアップ
まずはAuthパッケージを使用できるようにします。パッケージの中にあるAuthの設定ファイルをappの方にコピーします。
$ cp fuel/packages/auth/config/auth.php fuel/app/config/
必要があればコピーしたfuel/app/config/auth.phpの中身をいじります。
// fuel/app/config/auth.php
return array(
'driver' => 'Simpleauth',
'verify_multiple_logins' => false,
'salt' => 'hogehogehoge',
'iterations' => 10000,
);
とりあえず変えるところはsaltだけかしら。return array(
'driver' => 'Simpleauth',
'verify_multiple_logins' => false,
'salt' => 'hogehogehoge',
'iterations' => 10000,
);
この設定ファイルについて詳しい説明が欲しい人はこちらを参照。
2. always_loadにAuthを追加
自動でパッケージを読み込んで欲しいので、fuel/app/config/config.phpのalways_loadにAuthを追加します。
// fuel/app/config/config.php
'packages' => array(
//'orm',
'auth',
),
'packages' => array(
//'orm',
'auth',
),
3. SimpleAuthのセットアップ
SimpleAuthの設定ファイルをappにコピーします。
$ cp fuel/packages/auth/config/simpleauth.php fuel/app/config/
必要があれば、コピーしたfuel/app/config/simpleauth.phpに変更を加えてください。
// fuel/app/config/simpleauth.php
'remember_me' => array(
'enabled' => true,
...
),
'login_hash_salt' => 'fugafugafuga',
この設定ファイルについて詳しい説明が欲しい人はこちらを参照。
'remember_me' => array(
'enabled' => true,
...
),
'login_hash_salt' => 'fugafugafuga',
4. crypt.phpの設置
ログイン情報を維持させたい場合は↑の「remember_me」をONにします。(デフォルトはOFF)remember_meで使用するためのキーでエラーが出てくるので、画面に従ってfuel/app/config/crypt.phpを設置しましょう。

// fuel/app/config/crypt.php
return array(
'crypto_key' => 'g7IQpM86Yn685mAPOIqswbTo',
'crypto_iv' => 'WpMqLEg7YB1cNUc_VMp9YEtE',
'crypto_hmac' => 'rbMNicTA4AYU_60R_onNMqoI',
);
return array(
'crypto_key' => 'g7IQpM86Yn685mAPOIqswbTo',
'crypto_iv' => 'WpMqLEg7YB1cNUc_VMp9YEtE',
'crypto_hmac' => 'rbMNicTA4AYU_60R_onNMqoI',
);
5. DBの作成
DBを作成していきます。Mysql使ってまふ。testという名のDBを作成。
mysql> create database test
現在の開発環境はdevelopmentを使用しているのでfuel/app/config/development/db.phpを変更。
// fuel/app/config/development/db.php
return array(
'default' => array(
'connection' => array(
'dsn' => 'mysql:host=localhost;dbname=test',
'username' => 'root',
'password' => 'pass',
),
),
);
FuelPHPの三大便利機能return array(
'default' => array(
'connection' => array(
'dsn' => 'mysql:host=localhost;dbname=test',
'username' => 'root',
'password' => 'pass',
),
),
);
「Oil」を使ってテーブルを自動作成していただきます。
$ php ./oil refine migrate --packages=auth
すると、何やらたくさんDBを作ってくれます。(多分usersしか使わないんだけども...)
$ php ./oil refine migrate --packages=auth Performed migrations for package:auth: 001_auth_create_usertables 002_auth_create_grouptables 003_auth_create_roletables 004_auth_create_permissiontables 005_auth_create_authdefaults 006_auth_add_authactions 007_auth_add_permissionsfilter 008_auth_create_providers 009_auth_create_oauth2tables 010_auth_fix_jointables
mysql> show tables; +--------------------------+ | Tables_in_test | +--------------------------+ | migration | | users | | users_clients | | users_providers | | users_scopes | | users_sessions | | users_sessionscopes | +--------------------------+ 7 rows in set (0.00 sec)
6. テストユーザーの追加
確認用のユーザーを追加します。Auth::create_user('ユーザー名', 'パスワード', 'メールアドレス');です。
$ php ./oil console
>>> Auth::create_user('admin', 'password', 'admin@hoge.com');
1
>>> exit;
一応追加されているか確認。>>> Auth::create_user('admin', 'password', 'admin@hoge.com');
1
>>> exit;
mysql> select id, username, email from users; +----+----------+----------------+ | id | username | email | +----+----------+----------------+ | 1 | admin | admin@hoge.com | +----+----------+----------------+ 1 row in set (0.00 sec)
7. いざログイン
とりあえずコード上でログイン周りを実装してみましょう。if(!Auth::check()) {
echo 'ログインしていません。更新するとログインします。';
Auth::login('admin', 'password'); // ログイン処理
} else {
$name = Auth::get_screen_name();
echo 'ようこそ'.$name.'さん!';
}
Auth::check()でログインしているかの判定。echo 'ログインしていません。更新するとログインします。';
Auth::login('admin', 'password'); // ログイン処理
} else {
$name = Auth::get_screen_name();
echo 'ようこそ'.$name.'さん!';
}
Auth::login('username or email', 'パスワード')でログイン。
Auth::get_screen_name()でusernameを取得します。
関数の説明群はこちら。

後は入力フォームとか作ったり、
ログアウトボタンを設置したりするだけです。
(これが一番めんどくさかったりするのよね。)
合わせて読んでおくと良いカモ
SimpleAuthでユーザーのサブ情報を保存する場合の注意です。⇒【FuelPHP】Notice: unserialize() [function.unserialize]: Error at offset 23 of 34 bytesとか出てくるとき
ではでは。