作成日: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 '更新失敗';
}