Tymon JWT:如何通过已验证用户通过其ID与另一个用户进行身份验证?

时间:2020-10-21 19:41:36

标签: php laravel jwt-auth

库: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忘记当前用户(但是通过“注销”,我会获得列入黑名单的令牌异常)...

1 个答案:

答案 0 :(得分:0)

public function login()
{
    $token = Auth::login(User::find(1));

    return response([
        'status' => 'success',
        'token' => $token,
    ])->header('Authorization', $token);
}

因此,您必须保存此令牌或覆盖现有令牌。如果您将用户数据存储在前端,则在重新授权后,您必须重新获取它