库:https://github.com/tymondesigns/jwt-auth
例如,当我以管理员身份通过身份验证时,我想为其他用户进行身份验证/获取新令牌。 因此,想象一下一个前端,您可以在其中单击用户并获取该用户的令牌(如果您是管理员)。
所以,这是我的方法:
public function authenticate_as(Request $request)
{
$user = auth()->user();
if ($user && $user->role->role === 'admin') {
$data = json_decode($request->getContent(), true);
$user_id = $data['user_id'];
$repository = new UsersRepository();
$new_user = $repository->show($user_id);
//$token = auth()->tokenById($user_id);
$token = auth()->login($new_user);
return $this->respondWithToken($token);
}
return response()->json([
'error' => 'Unauthorized'
], 403);
}
您可以看到$token = auth()->tokenById($user_id)
和$token = auth()->login($new_user);
的尝试。
在两种情况下,经过身份验证的管理员用户的id == 1,$ user_id为2。最后,我得到的有效负载令牌的sub == 1,所以...我是另一个令牌的管理员...
当然在用户表2中存在...
那么,如何在不知道他的密码却知道他的ID的情况下为另一个用户获得令牌?
编辑: 该问题来自某个会话。因为当我预先授权其他用户(管理员)时,新令牌的sub具有第一个用户的ID,而不是新用户的ID。 没有以前的身份验证,我就没有这个问题。 因此,我需要消除所有会话...或强制Tymon / JWT忘记当前用户(但是通过“注销”,我会获得列入黑名单的令牌异常)...
答案 0 :(得分:0)
public function login()
{
$token = Auth::login(User::find(1));
return response([
'status' => 'success',
'token' => $token,
])->header('Authorization', $token);
}
因此,您必须保存此令牌或覆盖现有令牌。如果您将用户数据存储在前端,则在重新授权后,您必须重新获取它