作成日:2017-11-09, 更新日:2018-10-02
基本設定
必要に応じてカラムを増やしてもOK
・「テーブル名:users」の場合
名称 | データ型 | 他 |
---|---|---|
id | int | NOT NULL、AUTO_INCREMENT、PRIMARY KEY (`id`) |
username | varchar | NOT NULL、UNIQUE KEY `username` (`username`) |
password | text | NOT NULL |
group | int | NOT NULL |
varchar | NOT NULL、UNIQUE KEY `email` (`email`) | |
last_login | int | NOT NULL |
login_hash | varchar | NOT NULL |
profile_fields | text | NOT NULL |
created_at | int | NOT NULL |
updated_at | int | NOT NULL |
クエリ
CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `password` text NOT NULL, `group` int(11) NOT NULL, `email` varchar(255) NOT NULL, `last_login` int(11) NOT NULL, `login_hash` varchar(255) NOT NULL, `profile_fields` text NOT NULL, `created_at` int(11) NOT NULL, `updated_at` int(11) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `username` (`username`), UNIQUE KEY `email` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
※日付関連はint型にしておくとFuelPHP側で都度、書換え等してくれる。
他の設定
「fuel\packages\auth\config」の中にいる下記ファイルを「fuel\app\config」の中に複製してから修正。
「auth.php」で色々設定 | ・Saltの設定(salt) ・使うAuthのドライバの設定(driver) |
---|---|
「simpleauth.php」で色々設定 |
・groups、rolesの設定 ・Saltの設定(login_hash_salt) ・テーブルで使うログインID、パスワードのキーネーム(username_post_key、password_post_key) ・テーブル名(table_name) |
よく使う関数
各変数($id, $username, $password, $email)は上記の各カラム名の値
ユーザー作成
作成されたユーザレコードの 「id」 が返ってくる。失敗は「false」
- ユーザー作成
-
\Auth::create_user($username, $password, $email);
- ユーザー作成(グループ付き)
-
\Auth::create_user($username, $password, $email, $group);
ログイン周り
- ログイン中か確認
-
if(!\Auth::check()) { // 未ログイン } else { // ログイン中 }
- emailでログイン
-
if ( \Auth::login($email, $password) ) { // ログイン成功 }
- usernameでログイン
-
if ( \Auth::login($username, $password) ) { // ログイン成功 }
- 強制ログイン
-
\Auth::force_login($id)
- ログアウト
-
\Auth::logout();
ユーザー情報の取得
- ログインしている人の指定したカラムの値(※「カラム:username」の値が欲しいとき)
-
$value = \Auth::get('username');
※カラム名を引数にする。usernameなどカラムによっては専用の関数が用意されているけど、覚えるのが面倒ならget()だけ覚えておけばいい。
- ログインしている人の指定したカラムの値(※「カラム:profile_fields」の「〇〇〇」が欲しいとき)
-
$value = \Auth::get_profile_fields('〇〇〇', '');
※第2引数:見つからなかったときの初期値
ユーザー情報の編集
- ログインしている人の情報書き換え
-
\Auth::update_user( array("email"=>〇〇〇) );
※戻り値は成功したらtrue。失敗はfalse。
- ログインしている人の情報書き換え(profile_fields)
-
\Auth::update_user( array("〇〇〇"=>〇〇〇) );
※存在しないカラム名は「profile_fields」の中にシリアライズされて格納される
- ユーザー指定で情報書き換え
-
\Auth::update_user( array("email"=>〇〇〇), 対象のusername );
パスワードの変更
- パスワード書換え
-
\Auth::change_password($old_password, $new_password, $username);
※戻り値は成功したらtrue。失敗はfalse(旧パスワードが間違っているとき)
- 強制パスワード書換え:一発では出来ない。一度、リセットしてから書き換える
-
$old_password = \Auth::reset_password($username); \Auth::change_password($old_password, $new_password, $username);
※「reset_password()」で新しいパスワードが返ってくるので、コレを古いパスワードとする。
「カラム:profile_fields」の更新・削除について
追加・更新
例)「email」と「profile_fields」の「zebra」を書き換えたい
$ary = array( 'email' => 〇〇〇, // 「カラム:email」に格納 'zebra' => 〇〇〇, // 「カラム:profile_fields」にシリアライズされた値が格納される ); if ( \Auth::update_user($ary) ) { echo '更新成功'; } else { echo '更新失敗'; }
※「zebra」が無ければ追加、あれば更新。
削除
「カラム:profile_fields」に追加した値のクリアはできない。
どうしてもクリアしたいなら「カラム:profile_fields」を手動で書き換える(serialize()する)
$newProfileFields = array( 〇〇〇 => 〇〇〇, ); // 「\auth::update_user()」を使わずに「カラム:profile_fields」に「serialize($newProfileFields)」を書き込む
まとめ
ログインする
$name = 〇〇〇; // username or email $pswd = 〇〇〇; // パスワード if ( !\Auth::login($name, $pswd) ) { echo 'username or email or パスワードが間違っている'; } else { echo 'ログイン成功'; }
ログイン可能かチェック(ログインはしない)
$name = 〇〇〇; // username or email $pswd = 〇〇〇; // パスワード if ( !$user = \Auth::validate_user($name, $pswd) ) { echo 'username or email or パスワードが間違っている'; } else { var_dump($user); }
自分自身がログインしているかチェック
if ( !\Auth::check() ) { echo 'ログインしていない'; } else { echo 'ログイン中'; }
新規
$name = 〇〇〇; // username: ユーザー名 $pswd = 〇〇〇; // password: パスワード $mail = 〇〇〇; // email : メールアドレス $grop = 〇〇〇; // group : ユーザーグループ $pFid = array( // profile_fields 〇〇〇 => 〇〇〇, 〇〇〇 => 〇〇〇, ); if ( !$id = \Auth::create_user($username, $password, $email, $group, $pFid) ) { echo '作成失敗'; } else { echo '作成成功 id=' . $id; }
※第5引数の$pFid(profile_fields)は無くてもOK
更新
$username = 〇〇〇; // 更新対象 $update = array( 'group' => 〇〇〇, 'email' => 〇〇〇, // ▼「username」は仕様上、NG(セキュリティ対策) // 'username' => ×××, // ▼パスワードも更新するときは「old_password」も必要 'password' => 〇〇〇, 'old_password' => 〇〇〇, // ▼profile_fieldsの値 〇〇〇 => 〇〇〇, ); if ( !\Auth::update_user( $update, $username ) ) { echo '更新失敗'; }
※第2引数の$usernameを省略すると自分自身を対象にする
※更新しないカラムはセットしなくてOK
profile_fieldsをクリアしたい
シリアライズしたデータをprofile_fieldsにセットして直接updateを実行。
username・その他のカラムを変更したい
直接updateを実行。
パスワードだけ書換え
$username = 〇〇〇; // 更新対象 $oldPsd = 〇〇〇; // 今までのパスワード $newPsd = 〇〇〇; // 新しいパスワード if ( !Auth::change_password($oldPsd, $newPsd, $username) ) { echo '更新失敗'; }
※第2引数の$usernameを省略すると自分自身を対象にする
パスワード強制書換え(パスワードリセットしてから書き換える)
$username = 〇〇〇; // 更新対象 $newPsd = 〇〇〇; // 新しいパスワード $oldPsd = \Auth::reset_password($username); if ( !Auth::change_password($oldPsd, $newPsd, $username) ) { echo '更新失敗'; }