0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravel5.8でマルチ認証を実装する(参考記事の補足)

Posted at

Laravel5.8でマルチ認証を実装する(参考記事の補足)

Laravel5.8でのマルチ認証の大枠の実装に関してはこちらの記事を参考にしました。

しかし、記事にもいくつか修正すべき点が見受けられたので、忘備録も兼ねてまとめます。

【補足1】ルーティングはどのように記述すればいいの?

記事の方ではこのように書かれています。

routes/web.php
/** 以下追加 **/
// Admin
Route::group(['prefix' => 'admin'], function(){
    // AdminHome
    Route::get('home', 'Admin\HomeController@index')->name('admin.home');
    //login&logout
    Route::get('login', 'Admin\LoginController@showLoginForm')->name('admin.login');
    Route::post('login', 'Admin\LoginController@login')->name('admin.login');
    Route::post('logout', 'Admin\LoginController@logout')->name('admin.logout');
});
/** ここまで **/

Route::group(['prefix' => 'admin']としているだけで、肝心のmiddlewareに関する部分が抜けています。
なので、下記のように修正が必要です。

routes/web.php
// 'middleware'=>'auth:admin'を追加
Route::group(['prefix' => 'admin', 'middleware'=>'auth:admin'], function(){
    
    //管理者ログインしたユーザーのみアクセス可能にしたいルーティングを記述
    Route::get('home', 'Admin\HomeController@index')->name('admin.home');

});

//ログインやログアウト後のページに関しては、非ログイン時にアクセスするので'middleware'=>'auth:admin'の外に記述する
Route::get('admin/login', 'Admin\LoginController@showLoginForm')->name('admin_login');
Route::post('admin/login', 'Admin\LoginController@login')->name('admin_login');
Route::post('admin/logout', 'Admin\LoginController@logout')->name('admin_logout');

要点は以下2点。
・ログイン後のみアクセス許可したいページは'middleware'=>'auth:admin'をgroupで囲む
・ログインやログアウト後のページに関しては、非ログイン時にアクセスするので'middleware'=>'auth:admin'の外に記述する

【補足2】 管理者ログイン情報取得 正しくは、、、

管理者マイページにログイン中の管理者情報を取得する場合、記事だと以下のように書かれています。

xxxController.php
use Illuminate\Support\Facades\Auth;

$admin = Auth::user();
$admin->id;
$admin->name;

しかしこれだと、当然、通常ログイン中のユーザー情報が取得されてしまいます。
そこで下記のように修正が必要になります。

xxxController.php
use Illuminate\Support\Facades\Auth;

$admin = Auth::guard('admin')->user(); //ログイン中の管理者情報を取得
$admin->id;
$admin->name;

guardとは何なのかについてはこちらの記事で解説されています。

要は、config/auth.phpで

config/auth.php
    'guards' => [
        'user' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],
    ],

と、adminをguardsに設定しているので、guard('admin')が使えるという事です。

より実践的な説明として、参考に例を挙げます。
管理者マイページにログイン中の管理者情報を表示したい場合、以下の通りになります。

ProfileController.php
namespace App\Http\Controllers\Admin; //必要。念の為これも補足。
use Illuminate\Support\Facades\Auth;

    public function mypage()
    {
        $admin = Auth::guard('admin')->user(); 
        return view('admin.profile.mypage',['admin' => $admin]);
    }

こんな具合になります。
そして、mypage.blade.phpで{{ $admin->name }}とすればnameが取得できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?