Laravel에서 tymon/jwt-auth를 사용하여 JWT 영패 자동 업데이트

2887 단어 jwt-authLaravel

환경

  • Laravel 6.0

  • tymon/jwt-auth 1.0.0-rc.5
  • 개요


    JWT 영패는 영패 자체에 유효기간을 삽입하였으며, 기한을 갱신하기 위해서는 영패 자체를 교체해야 한다.
    프론트 데스크에서 유효기간을 관리하고 영패를 갱신하지 않고 슬라이딩 세션을 실현합니다.
    영패는 쿠키로 프론트에 보관한다.서버에서 만료가 감지되면 새 태그를 쿠키로 설정합니다.
    토큰이 만료됨(JWT_TTL: 기본값 1시간)가 끊어지더라도 만료 시간 새로 고침 (JWT_REFRESH_TTL: 기본값은 2주) 내에서만 이 영패를 사용하여 새 영패를 발행할 수 있다.

    로그인 순서


    사전 설정태그 업데이트 시퀀스실시 서버 측에서 영패의 유효기간이 만료된 것을 검출하여 리셋한 후 되돌아오는 중간부품을 제작합니다.잘못된 영패나 업데이트가 실패하면 이후 정상적인 처리에서 401이 되기 때문에 아무것도 하지 않습니다. namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Tymon\JWTAuth\Exceptions\JWTException; use Tymon\JWTAuth\Exceptions\TokenExpiredException; use Tymon\JWTAuth\Http\Middleware\BaseMiddleware; class RefreshToken extends BaseMiddleware { public function handle($request, Closure $next) { $token = $newToken = null; try { $token = $this->auth->parseToken(); $token->authenticate(); } catch (TokenExpiredException $e) { // Token expired: try refresh try { $newToken = $token->refresh(); } catch (JWTException $e) { // Refresh failed (refresh expired) } } catch (JWTException $e) { // Invalid token } $response = $next($request); if ($newToken) { // Send the refreshed token back to the client. $response->withCookie(cookie( 'token', $newToken, config('jwt.refresh_ttl'), // minutes null, // path null, // domain $request->getScheme() === 'https', // secure true // httpOnly )); } return $response; } } 이 중간부품을 사용합니다. namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel { ... protected $middlewareGroups = [ 'api' => [ ... \App\Http\Middleware\RefreshToken:class,/JWT 영패 업데이트 ※ bindings 전에 'bindings', ... ], ]; } 블랙리스트 유예 기간 설정리셋을 진행하면 낡은 영패를 즉시 사용할 수 없기 때문에 프론트에서 여러 개의 요청을 동시에 진행하는 경우 일부 요청이 실패할 수 있습니다.이런 상황을 방지하기 위해 일정 시간 동안 낡은 영패를 사용할 수도 있다.env블랙리스트 유예기간(JWT_BLACKLIST_GRACE_PERIOD).(예: 15초)
    JWT_BLACKLIST_GRACE_PERIOD=15
    

    좋은 웹페이지 즐겨찾기