Laravel Sanctum海关守卫 [英] Laravel Sanctum custom guard
问题描述
我的laravel应用程序中有多个警卫:
I've multiple guards in my laravel application:
代码 config/auth.php
:
'defaults' => [
'guard' => 'user',
'passwords' => 'users',
],
'guards' => [
'user' => [
'driver' => 'token',
'provider' => 'users',
'hash' => true,
],
'admin' => [
'driver' => 'token',
'provider' => 'admins',
'hash' => true,
]
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => Admin::class,
],
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'users_password_resets',
'expire' => 60,
'throttle' => 60,
],
'admins' => [
'provider' => 'admins',
'table' => 'admins_password_resets',
'expire' => 60,
'throttle' => 60,
],
],
'password_timeout' => 10800,
在 api.php
中有获取身份验证用户的路由:
And has route for get authenticated user in api.php
:
Route::get('admins/auth/user', 'AuthController@user')->middleware('auth:sanctum');
在我的模型(管理员,用户)中也使用了特征:
Also in my models (Admin, User) used trait:
Laravel \ Sanctum \ HasApiTokens
当我尝试通过令牌获取身份验证用户时,出现错误消息:
When I tried get auth user by token get error with message:
InvalidArgumentException: Auth guard [web] is not defined. in file appname\vendor\laravel\framework\src\Illuminate\Auth\AuthManager.php on line 84
#0 appname\vendor\laravel\framework\src\Illuminate\Auth\AuthManager.php(68): Illuminate\Auth\AuthManager->resolve()
#1 appname\vendor\laravel\sanctum\src\Guard.php(45): Illuminate\Auth\AuthManager->guard()
#2 [internal function]: Laravel\Sanctum\Guard->__invoke()
#3 appname\vendor\laravel\framework\src\Illuminate\Auth\RequestGuard.php(58): call_user_func()
#4 appname\vendor\laravel\framework\src\Illuminate\Auth\GuardHelpers.php(60): Illuminate\Auth\RequestGuard->user()
#5 appname\vendor\laravel\framework\src\Illuminate\Auth\Middleware\Authenticate.php(63): Illuminate\Auth\RequestGuard->check()
#6 appname\vendor\laravel\framework\src\Illuminate\Auth\Middleware\Authenticate.php(42): Illuminate\Auth\Middleware\Authenticate->authenticate()
我已经运行了命令:
php artisan cache:clear
php artisan config:cache
还尝试将防护名称添加到 config/sanctum.php
:
And also tried add guard name to config/sanctum.php
:
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', 'localhost,127.0.0.1')),
'expiration' => null,
'middleware' => [
'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class,
'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class,
],
// This line added
'guard' => 'admin'
推荐答案
对我来说,在配置文件中添加防护措施可以解决我的问题.
For me, adding the guard in the config file solved my issue.
'guard' => 'admin'
您可以在此处查看圣所的守卫如何使用该配置.
You can see here how the config is being used by sanctum's guard here.
https://github.com/laravel/sanctum/blob/2.x/src/Guard.php#L55
由于配置是由 Arr :: wrap
这篇关于Laravel Sanctum海关守卫的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!