JWT 完整使用详解,php升级到8的操作

https://learnku.com/articles/10885/full-use-of-jwt

https://packagist.org/packages/tymon/jwt-auth#dev-develop 包

https://laravel.bepsvpt.me/

 

可以升级到php8  omposer require tymon/jwt-auth:1.*@dev

 

https://blog.csdn.net/caozhennan824/article/details/106878109/ 详细介绍

https://blog.csdn.net/Gan_1314/article/details/127795406?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-127795406-blog-127362599.pc_relevant_3mothn_strategy_recovery&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-127795406-blog-127362599.pc_relevant_3mothn_strategy_recovery&utm_relevant_index=1

中间件
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use App\ToolClass\ApiResponse; use Tymon\JWTAuth\Exceptions\JWTException; use Tymon\JWTAuth\Exceptions\TokenExpiredException; use Tymon\JWTAuth\Exceptions\TokenInvalidException; use Tymon\JWTAuth\Http\Middleware\BaseMiddleware; class CheckToken extends BaseMiddleware { use ApiResponse; public function handle(Request $request, Closure $next) { try { // 检查请求中携带token $this->checkForToken($request); } catch (\Throwable $th) { return $this->error('未提供令牌', 401); } // 获取当前token $token = $this->auth->getToken(); try { // 检测用户的登录状态,如果正常则通过 if ($this->auth->parseToken()->authenticate()) { return $next($request); } return $this->error('未登录', 401); } catch (TokenExpiredException $exception) { // token 过期异常 try { // 刷新 token $token = $this->auth->refresh(); // 使用一次性登录以保证此次请求的成功 auth('api')->onceUsingId($this->auth->manager()->getPayloadFactory()->buildClaimsCollection()->toPlainArray()['sub']); } catch (JWTException $exception) { // 如果捕获到此异常,即代表 refresh 也过期了,用户无法刷新令牌,需要重新登录。 return $this->error('令牌过期', 401); } } catch (TokenInvalidException $exception) { return $this->error('令牌无效', 401); } return $this->setAuthenticationHeader($next($request), $token); } }

  

posted @ 2022-05-29 16:28  星云惊蛰  阅读(380)  评论(0)    收藏  举报