我正试图使用多个保护来制作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