我用jwt设置了Laravel(使用jwt-auth).在我的Kernel.php - $ routeMiddleware中我添加了:
'jwt.auth' => \Tymon\JWTAuth\Middleware\GetUserFromToken::class,
'jwt.refresh' => \Tymon\JWTAuth\Middleware\RefreshToken::class
Run Code Online (Sandbox Code Playgroud)
据我所知,'jwt.refresh'将为每个请求自动刷新/为用户创建一个新令牌.
在我的单页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]);
}
Run Code Online (Sandbox Code Playgroud)
问题是当调用isAuthenticated()时,JWTAuth :: refresh($ token)调用失败.
我想这与令牌刷新有关.
我想要做的是,如果客户端的令牌有效,则返回true.有没有办法做到这一点?
删除'jwt-refresh'似乎无法为我们解决问题.
先感谢您!
我的第一个观察是,令牌存储在哪里?它是否与请求一起解析?因为我相信如果您的应用程序将 jwt 与 api 一起使用,那么每个请求都应该有一个令牌来表示已登录的用户,因此这样的事情会有所帮助:
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
}
}
Run Code Online (Sandbox Code Playgroud)
如果从请求中成功解析,则:
$user = JWTAuth::toUser($token);
Run Code Online (Sandbox Code Playgroud)
见:https : //github.com/tymondesigns/jwt-auth/wiki/Authentication
使用您的示例代码,如果未设置令牌 - 不会检索任何内容。但是,如果您想要基于会话的身份验证,为什么不使用 Laravel 的默认身份验证。
希望这可以帮助 :)
| 归档时间: |
|
| 查看次数: |
9105 次 |
| 最近记录: |