【问题标题】:Tymon JWT: how can I authenticate from authenticated user with another user via his id?Tymon JWT:我如何通过他的 id 从经过身份验证的用户与另一个用户进行身份验证?
【发布时间】: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 忘记当前用户(但使用“注销”我会得到列入黑名单的令牌异常)......

【问题讨论】:

    标签: php laravel jwt-auth


    【解决方案1】:
    public function login()
    {
        $token = Auth::login(User::find(1));
    
        return response([
            'status' => 'success',
            'token' => $token,
        ])->header('Authorization', $token);
    }
    

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

    【讨论】:

    • 该令牌具有调用者的子对象,而不是新认证的...似乎 Tymon/JWT 使用某种会话,这会覆盖用户对象...
    • jwt 不太可能在会话中存储任何数据。可能你再次登录后没有再次获取用户?
    猜你喜欢
    • 2012-11-23
    • 2018-03-03
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 2020-11-15
    • 2016-01-17
    相关资源
    最近更新 更多