Laravel投稿サイト構築.50 マルチログイン実装(前半戦)
前回
テーマの投稿は認証済ユーザのみ、返信は誰でもできるように修正。
今回は、管理者と一般ユーザを分けて、さしあたり管理者のみ削除可能としたい。
■モデルファイル作成
$php artisan make:model Admin -m
■管理者ユーザ用のテーブル作成
ユーザマスタにフラグを増やすのではなくそれ用のテーブルを作成するんだと。
管理者テーブルをadminsとしてマイグレーションファイルを作成。
$php artisan make:migration create_admins --table=admins
項目はユーザマスタと同じ。
$php artisan migrate
■Guard
Laravelは認証の仕組みでGuardを使用する。
Guardを設定したページには認証が正しく行われていないとアクセスできない仕組み。
config\auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Models\Admin::class,
],
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
'throttle' => 60,
],
'admins' => [
'provider' => 'admins',
'table' => 'password_resets',
'expire' => 60,
'throttle' => 60,
],
],
■ルートファイルの複製
routes/auth.phpを複製して routes/admin.phpを作成する。
ルーティングに
->middleware('guest:admin') を追記。
■ルーティング追加
require __DIR__.'/admin.php';
■コントローラ作成
ControllersにAdminフォルダを作成して、Authフォルダを丸ごとコピーする。
各ファイルの名前を"Admin\Auth"に置換する。
■Route:List確認
$php artisan route:list でルーティングの確認
エラーは出ないが、auth.phpとadmin.phpでルーティング先が同じなため追加されず上書きされている状態。
■ルーティングを分ける
web.phpにadmin認証用のルーティングを追記
Route::prefix('admin')->name('admin.')->group(function(){
require __DIR__.'/admin.php';
});
通常とadminでルーティングが分かれたことを確認。
長くなるので次回へ続く。