web-dev-qa-db-ja.com

Laravel SanctumはMultiauthガードを使用できます

laravel sanctumでテストしていますが、ここにいくつかの問題があります。管理者ガードを作成しています。

enter image description here

ミドルウェアをauth:sanctum_adminに変更すると、管理者のみがアクセスできるようになりますが、ここでは、Webガードを使用して通常のユーザーアカウントでアクセスできます。なぜなのかわからないのですが... multiauthパッケージでパスポートを使用しました。ただし、ここの聖域では、ユーザーテーブルと管理者を別々にすることはできません。

1
Thomas

@Abhishek Mitra

Laravel Sanctumを使用してMultiple Auth Guardの場合の認証を行うには、ミドルウェアをそのまま使用できます。

Route::middleware(['auth:guard_name'])->get('/user', function(){
    return auth()->guard('guard_name')->user();
}
3
Harat

聖域で複数のガードを使用することもできます。これを達成するには、次の手順に従います-

  1. 必要に応じて独自のガードを作成します。 (config/auth.php
'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],

        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ]
    ],
  1. プロバイダーを設定します。 (config/auth.php
'providers' => [
       'users' => [
           'driver' => 'eloquent',
           'model' => App\User::class,
       ],

       'admins' => [
           'driver' => 'eloquent',
           'model' => App\Admin::class,
       ],
   ],
  1. ユーザーを認証するときにこのガードを使用します。 (ルートファイル内)
    if(auth()->guard('admin')->attempt($request->only('email','password')))
    {
        return auth()->guard('admin')->user();
    }
    
2
Abhishek Mitra

デフォルトのガードは次のようにする必要があります:

'defaults'{
    'guard' : "sanctum_admin",
    'passwords': 'admins',
}

または

'defaults'{
    'guard' : 'web',
    'passwords' : 'users',
}
0
Nadir