laravel8 運用中のAUTH関連のユーザーテーブルをlaravelでどうにかしたい
FuelPHPからlaravelに移行させたいけど、ユーザー認証が面倒。laravel用のユーザーテーブルを新規作成。
作成日:2023-06-30, 更新日:2023-07-06
方針
出来る限りラクしたいし、複雑なコトもしたくない
ひとまず…
- 「旧ユーザー情報(FuelPHP)」 - FuelPHP時代に作成した情報
- 「新ユーザー情報(laravel)」 - 新たにlaravelで作成した情報
やらないコト
FuelPHP時代に作成したテーブルをlaravelでそのまま使うってコトはしない
やるコト
FuelPHP時代に作成したテーブルをlaravelで作成したテーブルにデータを移行してから、使う
laravel移行後のユーザーのログインについて
- ユーザーが「旧ユーザー情報(FuelPHP)」でログインする
- ログイン成功したら、パスワードの再設定をしてもらう
- 次回以降はパスワードの再設定は不要
laravel移行後のユーザーのログインの処理
- 「旧ユーザー情報(FuelPHP)」のテーブルを「テーブル: users」に移植
- どっかに「旧ユーザー情報(FuelPHP)」であるというフラグを立てておく
- ユーザーが「旧ユーザー情報(FuelPHP)」でログインする
- ユーザーネームより「旧ユーザー情報(FuelPHP)」か「新ユーザー情報(laravel)」を判別
- 「旧ユーザー情報(FuelPHP)」のとき
- FuelPHP用のログイン処理実行
- ログイン成功したら、パスワードの再設定をしてもらう → 「テーブル: users」のパスワードを書換え
- どっかに「新ユーザー情報(laravel)」に切り替えたってフラグを立てておく
既存のユーザーテーブルをlaravelのユーザーテーブルにinsert
INSERT INTO users ( id, name, email, email_verified_at, password, remember_token, created_at,updated_at ) SELECT 〇〇〇, # users.id 〇〇〇, # users.name 〇〇〇, # users.email CURRENT_DATE(), # users.email_verified_at password, # users.password '', # users.remember_token 〇〇〇, # users.created_at 〇〇〇 # users.updated_at FROM 〇〇〇 where 〇〇〇
FuelPHPのログイン処理
「\Auth::login()」から辿っていく
※simpleauthなら「packages/auth/classes/auth/login/simpleauth.php」の中っぽい
メモ
以下が正解なのかは知らない。ひとまず対応させるための手順
- 方針
- laravelが用意している「テーブル: users」に「カラム: group」を追加
- FuelPHPのユーザーテーブルからlaravelの「テーブル: users」にデータをinsert
- ログイン処理でパスワードの再設定をしているかチェック
方針
FuelPHPからlaravelに移行後にパスワードの再設定をしていない場合は再設定をさせたい
→何かしらのフラグを立てても良いんだけど面倒なのでユーザーグループで対応
▼FuelPHP側のユーザーグループが「管理者=1、ユーザー=2」としていた場合の例
- パスワードの再設定をしていない管理者 = 11
- パスワードの再設定をしていないユーザー = 12
- パスワードの再設定をした管理者 = 1
- パスワードの再設定をしたユーザー = 2
※単純に「+10」されているかどうかで判別させる
laravelが用意している「テーブル: users」に「カラム: group」を追加
やることは「マイグレーションファイルを作成」と「マイグレーション実行」の2つ
マイグレーションファイルを作成
▼modelは不要なので「--table」にする
$ ./vendor/bin/sail php artisan make:migration add_group_to_users --table=users
※対象は「テーブル: users」。ファイル名は「add_group_to_users」とする
▼作られるファイル
- database/migrations/20xx_xx_xx_xxxxxx_add_group_to_users.php
▼「20xx_xx_xx_xxxxxx_add_group_to_users.php」の修正
~ 略 ~ public function up(): void { Schema::table('users', function (Blueprint $table) { $table->integer('group')->unsigned()->default(0)->after('password')->comment(''); }); } ~ 略 ~ public function down(): void { Schema::table('users', function (Blueprint $table) { $table->dropColumn('group'); }); } ~ 略 ~
マイグレーション実行
$ ./vendor/bin/sail php artisan migrate
FuelPHPのユーザーテーブルからlaravelの「テーブル: users」にデータをinsert
INSERT INTO users ( id, name, email, email_verified_at, password, `group`, remember_token, created_at,updated_at ) SELECT 〇〇〇, # users.id 〇〇〇, # users.name 〇〇〇, # users.email CURRENT_DATE(), # users.email_verified_at password, # users.password `group`+10, # users.group '', # users.remember_token 〇〇〇, # users.created_at 〇〇〇 # users.updated_at FROM 〇〇〇 where 〇〇〇
ログイン処理でパスワードの再設定をしているかチェック
ログイン時に「users.group」で再設定済みか判別
メモ: fuelPHPのユーザーテーブルをlaravelに移植
上記では…「パスワード再設定ページに飛ばす」としたけど…「ログイン時にパスワードを更新」とするほうが利用者にとってラクだと思う
- ユーザーグループは欲しい
- FuelPHPのパスワードできたとき、laravelのパスワードに置換えたい
- 任意のタイミングで全端末から強制ログアウトさせたい
- usernameでもログインさせたい
作業内容
laravelのユーザーテーブルにカラム追加、ユニーク設定
- usersテーブルに「カラム: usergroup」を追加。型はfuelPHP側と同じにしておく
- usersテーブルに「カラム: comparison_at」を追加。全端末から強制ログアウトさせるためのフラグ代わり。date()よりtime()の方が比較がラクなので…int型にしておく
- usersテーブルの「カラム: name」をユニークに指定
fuelPHPのユーザーテーブルの中身をlaravelのユーザーテーブルにinsert
INSERT INTO users ( id, name, email, email_verified_at, password, usergroup, remember_token, comparison_at, created_at, updated_at ) SELECT id, # users.id username, # users.name email, # users.email CURRENT_DATE(), # users.email_verified_at password, # users.password `group`+100, # users.usergroup。パスワードをlaravel用に更新したかのフラグを追加しておく '', # users.remember_token 0, # users.comparison_at from_unixtime(created_at), # users.created_at from_unixtime(updated_at) # users.updated_at FROM labo_user where 1
任意のタイミングで全端末から強制ログアウトさせたい
パスワード更新したとき以外にも好きなタイミングで「テーブル: users」を「users.comparison_at=time()」で更新
諸々の処理: laravel8 すべての端末からログアウトさせたい
FuelPHPのパスワードをlaravelのパスワードに書き換えたい
- ログイン処理の前にログインID、パスワードでデータ取得
- usergroupを確認し、更新が必要ならパスワードをlaravelでハッシュ化して保存
- 通常のログイン処理
laravelってのはパスワードは手動でハッシュ化するっぽい。
FuelPHPで出来ていたコトが色々と出来ないので結構、面倒…