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

Posted

技术标签:

【中文标题】身份验证用户提供程序 [passport] 未使用 laravel 护照定义【英文标题】:Authentication user provider [passport] is not defined with laravel passport 【发布时间】:2019-03-27 10:05:28 【问题描述】:

我在 laravel 中有一个 api,我使用护照进行身份验证。

在我的 config/auth.php 文件中,我已更改此设置,因此 api 保护使用护照并引用我的用户提供程序

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

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

'providers' => [
   'users' => [
       'driver' => 'passport',
       'model' => App\Users::class,
   ],

这是我的 App/user.php

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravel\Passport\HasApiTokens;

class User extends Authenticatable

    use HasApiTokens;
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public static function lookup($login)
    
        return Self::where('email', $login)->first();
    

现在,当我想让某人登录时,我运行以下代码:

$newUser = new User([
           'name' => $login,
           'email' => $login,
           'password' => $password
       ]);

       $authUser = User::lookup($login);

       $tokenResult = $authUser->createToken('Personal Access Token');
       $token = $tokenResult->token;

       if ($remember)
       
          $token->expires_at = Carbon::now()->addWeeks(1);
          $token->save();
       

       return response()->json([
          'access_token' => $tokenResult->accessToken,
          'token_type' => 'Bearer',
          'expires_at' => Carbon::parse($tokenResult->token->expires_at)->toDateTimeString()
        ]);

这给我发回一个访问令牌就好了。我试图做的是检查用户在网站上执行其他功能时是否已登录。我在路由文件中这样做如下:

Route::get('me', 'Account@me')->middleware('auth:api');

所以我想获取登录者的信息,但它通过给我一个错误“身份验证用户提供程序 [passport] 未定义”而在中间件崩溃

任何帮助都是appriciated

【问题讨论】:

【参考方案1】:

您使用了错误的用户提供程序驱动程序passport,请改用eloquent,如下所示:

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
],

您的模型名称中还有一个额外的s

【讨论】:

以上是关于身份验证用户提供程序 [passport] 未使用 laravel 护照定义的主要内容,如果未能解决你的问题,请参考以下文章

使用 websockets 和 Nest.js 的 Passport 会话身份验证未进行身份验证

Laravel Passport 没有身份验证

如何使用passport-facebook身份验证重定向到用户登录react-redux应用程序的页面?

Passport.js 可选身份验证

通过用户身份验证(Node/Vue/Passport)防止中间人攻击

如何使用 Passport 对 Sails JS 应用程序进行身份验证? [复制]