【问题标题】:How to pass the user id along with JWT tokens in local storage如何在本地存储中传递用户 ID 和 JWT 令牌
【发布时间】:2019-09-10 05:19:30
【问题描述】:

我目前正在使用 LaravelVue 框架,并且我正在使用 JWT auth 进行身份验证。问题是我想将user_id 连同令牌一起传递给本地存储,这样如果我需要在某个地方使用它,我可以通过window.localstorage.getItem('user_id') 轻松访问它。我无法这样做。我是这些技术的新手,请帮助

我已经尝试传递令牌并且它是成功的,但是由于某种原因我无法传递 id。

我的 JWT 验证码是:

public function login(Request $request)
{

    $credentials = $request->json()->all();

    try{
        if (!$token = JWTAuth::attempt($credentials)){
            return response()->json(['error'=>'invalid_credentials'], 400);
        }
    }catch(JWTException $e) {
        return response()->json(['error' => 'could_not_create_token'], 500); // something went wrong whilst attempting to encode the token
    }

    return response()->json(compact('token'));

}


public function getAuthenticatedUser()
{
    try{
        if(!$user = JWTAuth::parseToken()->authenticate()){
            return response()->json(['user_not_found'], 404);
        }
    }catch(Tymon\JWTAuth\Exceptions\TokenExpiredException $e){
        return response()->json(['token_expired'], $e->getStatusCode());
    }catch(Tymon\JWTAuth\Exceptions\TokenInvalidException $e){
        return response()->json(['token_invalid'], $e->getStatusCode());
    }catch(Tymon\JWTAuth\Exceptions\JWTException $e){
        return response()->json(['token_absent'], $e->getStatusCode());
    }

    return $user;
    // \Log::info('user id found'.$userId);

}

我想在用户注册并登录时存储 id 并保留在本地存储中以供使用,并且仅在用户退出当前帐户时才删除。

提前谢谢。

【问题讨论】:

  • 您可以通过传递生成的令牌创建一个新的 Web 服务来获取用户详细信息。使用此代码:尝试 { $this->jsondata = JWTAuth::authenticate($request->token); $this->message = '已获取用户详细信息。'; $this->状态=真; } 捕捉 (JWTException $e) { $this->status = false; $this->message = '错误'; } return response()->json([ 'status' => $this->status, 'data' => $this->jsondata, 'message' => $this->message ]);
  • @azm_shah 感谢您的回复..但是你能告诉我我必须把这段代码放在哪里

标签: laravel authentication vue.js jwt local-storage


【解决方案1】:

在您的控制器中创建一个新函数,位于登录函数下方。

public function user_details(Request $request){

    try {
        $this->jsondata = JWTAuth::authenticate($request->token);
        $this->message = 'User details fetched.';
        $this->status = true;
    } catch (JWTException $e) {
        $this->status = false;
        $this->message = 'Error';
    }

    return response()->json([
        'status'    => $this->status,
        'data'      => $this->jsondata,
        'message'   => $this->message
    ]);
}

不要将 user_id 保存在浏览器的本地存储中,因为这将是一个主要的安全问题。使用此网络服务通过生成的令牌获取任何用户的详细信息。

【讨论】:

  • 我必须在哪里寻找详细信息.. 我必须控制台,否则它会将详细信息存储在 localStorage 中
  • 你在使用 Jwt for REST API 吗?
  • 我认为您应该将令牌存储在 localStorage 而不是存储其他信息
  • @AJ 是的,我将 Jwt 用于 rest API...我将令牌存储在 localStorage 但我无法获取我的 vue 组件的用户 id,这就是我想传递 id 的原因
  • @AstaLavista 是的,现在您可以使用发布请求,传递此存储的令牌并从 user_details 网络服务获取响应。
猜你喜欢
  • 2018-11-15
  • 2022-01-15
  • 2015-12-05
  • 2021-04-06
  • 2020-01-31
  • 2018-11-14
  • 1970-01-01
  • 2020-10-25
  • 2018-11-12
相关资源
最近更新 更多