升级后的 jwt-auth - 从请求令牌中获取用户
Posted
技术标签:
【中文标题】升级后的 jwt-auth - 从请求令牌中获取用户【英文标题】:jwt-auth after upgrade - get user from request token 【发布时间】:2020-07-22 03:35:49 【问题描述】:我升级了:
"tymon/jwt-auth": "0.5.*",
从一个非常旧的版本开始,API 似乎已经改变。我设法修复了登录,使用:
public function login(Request $request)
$credentials = $request->only(['username', 'password']);
$validator = Validator::make($credentials, [
'username' => 'required',
'password' => 'required',
]);
if($validator->fails())
throw new ValidationHttpException($validator->errors()->all());
if (!$token = auth()->attempt($credentials))
return response()->json(['error' => 'Unauthorized'], 401);
$user = auth()->user();
$user->ip_address = $request->ip();
if ($request->device_token)
$user->device_token = $request->device_token;
$user->save();
$data['token'] = $token;
$data['email'] = $user->email;
return response()->json($data);
所以我的登录工作正常,但所有需要令牌的 API - 现在都失败了。
失败的 API 示例:
class UserController extends Controller
public function __construct()
// $this->middleware('auth:api', ['except' => ['login']]);
public function enterWorld(Request $request)
$token = $request->input('token');
$user = JWTAuth::toUser($token);
return $user;
知道如何使用新 API 将令牌从请求转换为用户吗? 我找不到任何关于它的文档。
我试过了:
返回响应()->json(auth()->user());
但在这个 API 中它返回空数组。仅在登录时有效。
【问题讨论】:
【参考方案1】:尝试以下方法:
$user = JWTAuth::setRequest($request)->user();
您也可以在使用以下语法时显式设置保护:
// pass the guard in to the auth() helper.
return response()->json(auth('jwt')->user());
【讨论】:
谢谢,我刚刚注意到从我的登录示例返回的令牌是true
,所以这个方法什么也不返回。有什么想法吗?
你的用户模型中添加Tymon\JWTAuth\Contracts\JWTSubject
接口了吗?
是的,我加了这个接口
我会接受答案并为此打开新的以上是关于升级后的 jwt-auth - 从请求令牌中获取用户的主要内容,如果未能解决你的问题,请参考以下文章
tymon/jwt-auth Laravel:无法验证令牌签名
Laravel 7.0 - tymon/jwt-auth - 检查令牌是不是有效
tymondesigns/jwt-auth:如何创建过期令牌?