泰蒙 JWT user_not_found - Laravel 5.1

Har*_*g10 0 php authentication jwt laravel laravel-5.1

我正在为移动应用程序构建 api,并使用 JWT 来验证用户身份。我正在尝试在 Laravel 5.1 中实现它。

我不断收到错误:{"error":"user_not_found"}每当我使用身份验证方法给我的令牌时。

我的过程:

  1. 使用以下方式对用户进行身份验证Auth::attempt($credentials)
  2. 使用从数据库获取用户$user = User::where('user_id', Auth::user()->user_id)->first();
  3. 使用以下方式为用户设置令牌

    $token = "";
    try {
        // attempt to verify the credentials and create a token for the user
        if (! $token = JWTAuth::fromUser($user)) {
            return response()->json(['error' => 'invalid_credentials'], 401);
        }
    } catch (JWTException $e) {
            // something went wrong whilst attempting to encode the token
            return response()->json(['error' => 'could_not_create_token'], 500);
    }
    
    Run Code Online (Sandbox Code Playgroud)

它使用此方法返回一个令牌:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOm51bGwsImlzcyI6Imh0dHA6XC9cL3BlZGxyLmRldlwvYXBpXC9sb2dpbiIsImlhdCI6MTQ0OTk2NDQ2NywiZXhwIjoxNDQ5OTY4MDY3LCJuYmYiOjE0NDk5NjQ0NjcsImp0aSI6IjJlMDMyMjA5MjMyZWM1MDVlY2I3YzE4ODFjNDk1MzFmIn0.tbO_fv4WDQ6WgiHtyYJAq2rjnOtaYPq85VO2ja2YVzw
Run Code Online (Sandbox Code Playgroud)

但是当尝试使用令牌对用户进行身份验证时,它会抛出错误{"error":"user_not_found"}

我的routes.php:

Route::any('/login', ['as' => 'login', 'uses' => 'APIController@postLogin']);
Route::group(['middleware' => 'jwt.auth'], function()   {
    Route::any('/users', ['as' => 'users', 'uses' => 'UsersController@getUsers']);
});
Run Code Online (Sandbox Code Playgroud)

如果我把中间件组拿出来,我就可以访问该/users路由。我认为它发生在命名空间GetUserFromToken的类中的某个地方Tymon\JWTAuth\Middleware,因为这是唯一列出错误的地方user_not_found

我的数据库使用user_id,而不仅仅是id作为主键,这可能是问题所在吗?

Har*_*g10 6

最后我得到了它。

我进入了config/jwt.php发布时创建的文件JWTAuthServiceProvider,然后将 更改identifier为用户表的主键(当user设置设置为 时App\User,我的主键位于user_id用户模型中)。

'identifier' => 'user_id' // somewhere around line 79
Run Code Online (Sandbox Code Playgroud)

它奏效了。