API JWT保护和Laravel中的web会话保护



我正试图使用多个保护来制作Laravel,这取决于身份验证类型。

当我通过API进行身份验证时,我希望使用jwt保护。当我通过网络进行身份验证时,我想使用session防护。

我的configauth.php看起来像这样:

'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'jwt',
'provider' => 'users',
//'hash' => false,
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => AppUser::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身份验证可以很好地工作,而web则不能。我已经调试过了,它似乎总是在检查jwt防护。

有人能帮我吗?如果可能的话,我如何在路线上或Auth::routes()呼叫上设置警卫?

我已经通过将默认路由切换到web来解决这个问题。

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

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

最新更新