未定义身份验证驱动程序 [api]

Posted

技术标签:

【中文标题】未定义身份验证驱动程序 [api]【英文标题】:Auth guard driver [api] is not defined 【发布时间】:2017-11-11 22:21:11 【问题描述】:

我正在使用 laravel 5.4jwt auth jwt 版本为jwt-auth "tymon/jwt-auth": "0.5.*"

在 auth.php 我有

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

        'api' => [
            'driver' => 'jwt',
            'provider' => 'users',
        ],
    ],

在 Api.php 我有

 Route::post('/login','HomeController@authenticate');


Route::group(['prefix' => 'v2','middleware' => 'auth:api',], function () 

    // Authentication Routes...
   Route::get('/logout','HomeController@logout');
Route::get('/home','HomeController@home');

);

当我从邮递员那里发布电子邮件和密码时,它将返回令牌。

当我尝试访问时

http://localhost/demo/public/api/v2/home

并且标头我通过了授权承载令牌

我在邮递员中收到以下错误

哎呀,好像出了点问题。 (1/1) InvalidArgumentException 未定义身份验证保护驱动程序 [api]。在 AuthManager->resolve('api') 中的 AuthManager.php(第 99 行) AuthManager->guard('api') 中的 AuthManager.php(第 70 行) Authenticate->authenticate(array('api')) 处的 Authenticate.php(第 61 行)

可以帮我解决一下吗

我还检查了自 2016 年 9 月 27 日的旧问题以来的以下问题 https://github.com/tymondesigns/jwt-auth/issues/860

【问题讨论】:

【参考方案1】:

确保在您的 kernel.php 文件中声明了它

 protected $routeMiddleware = 

【讨论】:

这并不能解决问题【参考方案2】:

尝试设置token:

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

        'api' => [
            'driver' => 'token', // here !
            'provider' => 'users',
        ],
    ],

【讨论】:

【参考方案3】:

不一定是答案,但这是我使用过几次来安装和设置 JWT 令牌的文章,我没有遇到任何问题。

https://medium.com/employbl/build-authentication-into-your-laravel-api-with-json-web-tokens-jwt-cd223ace8d1a

希望这会有所帮助,祝你好运!

【讨论】:

【参考方案4】:

我通过将此行添加到 config\app.php 中的提供程序解决了这个问题

   'providers' => [
       ...
    Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
   ]

【讨论】:

【参考方案5】:

如果API 保护不存在,则可能会发生错误。为了解决这个问题,你必须设置API 保护

root->config->auth.php [line:38]

如下

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

        'api' => [
            'driver' => 'token', // make sure to add token on API driver
            'provider' => 'users',
        ],
    ],

来自默认注册表单的请求将有以下输入

local.DEBUG: array (
  '_token' => 'J0FzfW7huNaJxcUZnjYXF9g63OOiSHaH9vZSBc73', // token is required from the request
  'name' => 'mygem',
  'phone' => '+1 (484) 853-6668',
  'email' => 'cyvu@mailinator.com',
  'password' => 'Pa$$w0rd!',
  'password_confirmation' => 'Pa$$w0rd!',
)  

【讨论】:

【参考方案6】:

我遇到了同样的问题。我通过添加解决了它

"tymon/jwt-auth": "^1.0"

composer.jsonrequire array 中,然后运行composer install

【讨论】:

以上是关于未定义身份验证驱动程序 [api]的主要内容,如果未能解决你的问题,请参考以下文章

身份验证用户提供程序 [passport] 未使用 laravel 护照定义

创建通过外部 API 进行身份验证的自定义身份验证提供程序?

无法读取未定义的属性“身份验证”

我正在尝试为 user 和 admin 实现 laravel 5.2 多重身份验证。但是未定义身份验证用户提供程序 [] 错误给出

Bearer 未通过身份验证:签名验证失败

Web API 验证来自自定义身份验证提供程序的 JWT 不记名令牌