【发布时间】:2021-02-04 18:50:41
【问题描述】:
图书馆: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,所以...我是新的管理员,有另一个令牌...
当然在用户表 id 2 中存在...
那么,我如何在不知道他的密码但知道他的 ID 的情况下为另一个用户获取令牌?
编辑: 来自某个会话的问题。因为当我预授权其他用户(管理员)时,新令牌的子用户具有第一个用户的 ID,而不是新用户的 ID。 没有以前的身份验证,我没有这个问题。 所以,我需要消除所有会话......或者强制 Tymon/JWT 忘记当前用户(但使用“注销”我会得到列入黑名单的令牌异常)......
【问题讨论】: