Har*_*g10 0 php authentication jwt laravel laravel-5.1
我正在为移动应用程序构建 api,并使用 JWT 来验证用户身份。我正在尝试在 Laravel 5.1 中实现它。
我不断收到错误:{"error":"user_not_found"}每当我使用身份验证方法给我的令牌时。
我的过程:
Auth::attempt($credentials)$user = User::where('user_id', Auth::user()->user_id)->first();使用以下方式为用户设置令牌
$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作为主键,这可能是问题所在吗?
最后我得到了它。
我进入了config/jwt.php发布时创建的文件JWTAuthServiceProvider,然后将 更改identifier为用户表的主键(当user设置设置为 时App\User,我的主键位于user_id用户模型中)。
'identifier' => 'user_id' // somewhere around line 79
Run Code Online (Sandbox Code Playgroud)
它奏效了。
| 归档时间: |
|
| 查看次数: |
6367 次 |
| 最近记录: |