EGO-LOG

40代2児の父。主にプログラム学習と開発、仮想通貨、メタバース、たまに関係ないことを綴る。

Laravel投稿サイト構築.50 マルチログイン実装(前半戦)

前回

テーマの投稿は認証済ユーザのみ、返信は誰でもできるように修正。

 

tenomeuonome.hateblo.jp

 

今回は、管理者と一般ユーザを分けて、さしあたり管理者のみ削除可能としたい。

reffect.co.jp

■モデルファイル作成

$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') を追記。

■ルーティング追加

web.phpにadmin.phpを設定する。

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でルーティングが分かれたことを確認。

 

長くなるので次回へ続く。