如何在本地存储中将用户ID和JWT令牌一起传递

时间:2019-04-20 04:28:33

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

我目前正在使用 Laravel Vue 框架,并且正在使用 JWT身份验证进行身份验证。问题是我想将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,并且将其保留在本地存储中供使用,并且仅在用户退出当前帐户时才删除ID。

提前谢谢。

1 个答案:

答案 0 :(得分:2)

在登录功能下方的控制器中添加新功能。

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保存在浏览器的本地存储中,因为这将是一个主要的安全问题。使用此Web服务可通过生成的令牌获取任何用户的详细信息。