FuelPHP SimpleAuthでログイン機能の実装

公開: 2014-06-17 05:50
更新: 2016-04-29 06:02
PHPのフレームワークFuelPHPの
便利な機能「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だけかしら。
この設定ファイルについて詳しい説明が欲しい人はこちらを参照。




2. always_loadにAuthを追加

自動でパッケージを読み込んで欲しいので、
fuel/app/config/config.phpのalways_loadにAuthを追加します。
// fuel/app/config/config.php

'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',
この設定ファイルについて詳しい説明が欲しい人はこちらを参照。




4. crypt.phpの設置

ログイン情報を維持させたい場合は↑の「remember_me」をONにします。(デフォルトはOFF)
remember_meで使用するためのキーでエラーが出てくるので、画面に従ってfuel/app/config/crypt.phpを設置しましょう。
Crypto key error
// fuel/app/config/crypt.php

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の三大便利機能
「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;
一応追加されているか確認。
mysql> select id, username, email from users;
+----+----------+----------------+
| id | username | email          |
+----+----------+----------------+
|  1 | admin    | admin@hoge.com |
+----+----------+----------------+
1 row in set (0.00 sec)
OKですね。




7. いざログイン

とりあえずコード上でログイン周りを実装してみましょう。
if(!Auth::check()) {
        echo 'ログインしていません。更新するとログインします。';
        Auth::login('admin', 'password'); // ログイン処理
} else {
        $name = Auth::get_screen_name();
        echo 'ようこそ'.$name.'さん!';
}
Auth::check()でログインしているかの判定。
Auth::login('username or email', 'パスワード')でログイン。
Auth::get_screen_name()でusernameを取得します。
関数の説明群はこちら
SimpleAuthでログイン機能
うむ。よさげ。

後は入力フォームとか作ったり、
ログアウトボタンを設置したりするだけです。
(これが一番めんどくさかったりするのよね。)





合わせて読んでおくと良いカモ

SimpleAuthでユーザーのサブ情報を保存する場合の注意です。
⇒【FuelPHP】Notice: unserialize() [function.unserialize]: Error at offset 23 of 34 bytesとか出てくるとき


ではでは。


この記事をシェア
この記事にコメントする
書き込む
あっきぃ(@appstars_aki)
Web、iOSなフリーランサーです。好きなものはお寿司です。でもお寿司は高いので普段は雑草とか拾ったドングリを食べています。お仕事や意味もなく毎月お小遣いをくれる人を探してます。

お仕事の依頼や自分で作ったアプリのレビューを希望しちゃう方はaki@appstars.jpまでご連絡ください。