0

我正在尝试使用多个警卫来制作 Laravel - 取决于身份验证类型。

当我通过 API 进行身份验证时,我想使用jwt警卫。当我通过网络进行身份验证时,我想使用session警卫。

我的config\auth.php样子是这样的:

'defaults' => [
        'guard' => 'api',
        'passwords' => 'users',
    ],

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

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

'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
]

我的routes/web.php样子是这样的:

Route::get('/', 'HomeController@index')->name('home');
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');

我的routes/api.php样子是这样的:

Route::post('login', 'AuthController@login');
Route::get('logout', 'AuthController@logout');
Route::post('refresh', 'AuthController@refresh');
Route::get('me', 'AuthController@me');

我得到的是 API 身份验证工作正常,而网络却不行。我已经调试过了,似乎它总是在检查jwt警卫。

Auth::routes()有人可以帮我吗,如果可能或随叫随到,我该如何将警卫设置在路线上?

4

1 回答 1

0

我已经通过将默认设置切换到web路由来解决它。

然后我更新了代码以在我使用该方法的任何地方app/Http/Controllers/AuthController.php使用特定的身份验证:apiauth

auth('api')->attempt($validator->validated())'expires_in' => auth('api')->factory()->getTTL() * 60

于 2020-09-19T08:43:37.933 回答