gpt4 book ai didi

Laravel和jwt-auth-如何检查用户是否已登录

转载 作者:行者123 更新时间:2023-12-04 15:31:41 24 4
gpt4 key购买 nike

我已经用jwt(使用jwt-auth)设置了Laravel。在我的Kernel.php-$ routeMiddleware中,我添加了:

'jwt.auth' => \Tymon\JWTAuth\Middleware\GetUserFromToken::class,
'jwt.refresh' => \Tymon\JWTAuth\Middleware\RefreshToken::class

据我了解,'jwt.refresh'将为每个请求的用户自动刷新/创建一个新 token 。

在我的单页面ajax应用程序中,我需要检查用户是否已登录,所以我添加了一条调用此函数的路由:
  public function isAuthenticated() {
$token = JWTAuth::getToken();
if(!$token){
throw new JWTException('Token not provided');
}
try{
$token = JWTAuth::refresh($token);
}catch(TokenInvalidException $e){
throw new AccessDeniedHttpException('The token is invalid');
}
return $this->response->withArray(['token'=>$token]);
}

问题是,当调用isAuthenticated()时,JWTAuth::refresh($ token)调用失败。

我猜这与 token 被刷新有关。

我想做的是,如果客户端的 token 有效,则返回true。
有没有办法做到这一点?

删除“jwt-refresh”似乎无法为我们解决问题。

先感谢您!

最佳答案

我的第一个观察结果是, token 存储在哪里?它与请求一起解析吗?因为我相信如果您的应用程序将jwt与api一起使用,则每个请求都应具有一个 token 来表示已登录的用户,因此这样的操作会有所帮助:

try {
if (! $token = JWTAuth::parseToken()) {
//throw an exception
}
} catch (Exception $e) {
if ($e instanceof \Tymon\JWTAuth\Exceptions\TokenInvalidException){
//throw an exception
}else if ($e instanceof \Tymon\JWTAuth\Exceptions\TokenExpiredException){
//throw an exception
} else if ( $e instanceof \Tymon\JWTAuth\Exceptions\JWTException) {
//throw an exception
}else{
//throw an exception
}
}

如果从请求成功解析,则:
$user = JWTAuth::toUser($token);

请参阅: https://github.com/tymondesigns/jwt-auth/wiki/Authentication

对于您的示例代码,如果未设置 token -将不会检索任何内容。但是,如果您要基于 session 的身份验证,为什么不使用Laravel中的默认身份验证。

希望这可以帮助 :)

关于Laravel和jwt-auth-如何检查用户是否已登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40390141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com