Laravel Sanctum海关守卫 [英] Laravel Sanctum custom guard

查看:33
本文介绍了Laravel Sanctum海关守卫的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆