programing

laravel jwt의 만료 시간을 동적으로 설정합니다.

bestprogram 2023. 10. 4. 22:13

laravel jwt의 만료 시간을 동적으로 설정합니다.

안녕하세요 저는 앞 끝에 각진 js를 사용하고 있고, 뒤 끝에 라라벨을 사용하고 있습니다. tymon jwt library.저는 jwt 인증을 사용하고 있습니다.웹 앱에서 나를 기억해 주는 기능을 만들고 싶습니다.laravel 'config/jwt.php'에서 토큰 만료 시간을 설정하려면 'ttl'을 봅니다.

 /*
|--------------------------------------------------------------------------
| JWT time to live
|--------------------------------------------------------------------------
|
| Specify the length of time (in minutes) that the token will be valid for.
| Defaults to 1 hour
|
*/

'ttl' => 60,

기본적으로 1시간입니다.하지만 로그인하는 동안 사용자 클릭이 나를 기억한다면 이것을 1주일로 동적으로 변경하고 싶습니다.어떻게 하면 동적으로 바꿀 수 있을까요?감사해요.

추가할 수 있습니다.exp다음과 같은 커스텀 클레임으로서.

$token = JWTAuth::attempt($credentials, ['exp' => Carbon\Carbon::now()->addDays(7)->timestamp]);

위의 코드는 7일 후에 만료되는 토큰을 만듭니다.사용하지 않으셔도 됩니다.Carbon유닉스 타임스탬프만 있으면 돼요.Carbon라라벨에 내장된 이래로 단순화를 위해 여기에 있습니다.

사용가능JWTFactory(1.0 버전)

$myTTL = 30; //minutes

JWTAuth::factory()->setTTL($myTTL);
$token = JWTAuth::attempt($credentials);

필요한 만료 시간을 사용하여 JWT 토큰을 생성하려면 다음 작업을 수행할 수 있습니다.

JWTAuth::customClaims(['exp' => Carbon\Carbon::now()->addDays(2)->timestamp])
    ->fromUser($user);

100% 확신할 수는 없지만, 만약 당신이 당신의 영역 안에서 설정한다면 어떻게 될까요?AppServiceProvider@register구성:

config()->set('jwt.ttl', 60*60*7);

또는 전면부를 포함한 경우:

Config::set('jwt.ttl', 60*60*7);

동적으로 설정하는 이유는 무엇입니까?또는 구성에서 퍼블리싱을 사용하지 않는 경우(퍼블리싱하지 않는 경우)config/jwt.php)?

편집:

또 다른 해결책은 당신의 것을 통해 설정하는 것일 것입니다..env파일:

config/jwt.php
// set the default TTL to one week if the .env file does not contain a `JWT_TTL` var
'ttl' => env('JWT_TTL', 60*60*7), 

그리고 안에.env:

JWT_TTL=3600

위의 어떤 답변도 저에게 통하지 않았습니다.저는 그럭저럭 이렇게 할 수 있었습니다.

$ttl_in_minutes = 60*24*100;
// The parameter passed to the auth helper should match what is present in config/auth.php
if($request->input('remember')) auth('api')->factory()->setTTL($ttl_in_minutes);

타이몬 JWT v 1.0

사용자 로그인을 시도할 때 기본 ttl을 재정의할 수 있습니다.

if (! $token = auth()->setTTL(1)->attempt($credentials)) {
  return response()->json(['message' => 'Unauthorized user'], 401);
}

config/jwt.php를 변경하지 않고 토큰 ttl을 재정의합니다.

$token = auth()-> setTTL(7200)-> 시도($credentials);

JWT 토큰을 생성하면서 토큰 만료 시간을 설정할 수 있습니다.토큰 파라미터에서 설정할 수 있습니다.예를들면

$token      = array(
                         "iss" => "http://example.com",
                          "aud" => "http://example.com",
                          "exp" => {YOUR_EXPIRY_TIME}
                        );
$jwt=new JWT();
$JWT_TOKEN=$jwt->encode($token, {YOUR_KEY});

새 토큰은 해당 만료 시간과 함께 생성됩니다.

JWT 버전 1.0.0-rc.2의 경우 config/jwt.php의 설명서에 설명되어 있습니다.

참고로: ......만료되지 않는 토큰을 생성하도록 null로 설정할 수도 있습니다. 어떤 사람들은 모바일 앱을 위해 이런 행동을 원할 수도 있습니다. 이는 특별히 권장되지 않으므로 필요한 경우 토큰을 취소할 수 있는 적절한 시스템이 있는지 확인합니다. 공지사항: 이 값을 null로 설정하면 'required_claims' 목록에서 'exp' 요소를 제거해야 합니다.

'ttl' => env('JWT_TTL', 60)  meaning we must set 60 to null

 'required_claims' => [
        'iss',
        'iat',
       // 'exp',  <- remove this
        'nbf',
        'sub',
        'jti',
    ],

다음을 사용하여 토큰 만료를 동적으로 설정할 수 있습니다.

JWTAuth::factory()->setTTL($expirationInMinutes);

JWTAuth::attempt($credentials)

최신 버전에서는 아래 코드가 작동하지 않습니다.

$token = JWTAuth::attempt($credentials, ['exp' => Carbon\Carbon::now()->addDays(7)->timestamp]);

그렇게 할 수 있니

$token = auth('api')->setTTL((AuthController::EXPIRE_IN_DAYS * AuthController::MINUTES_IN_DAY))->attempt($credentials);

데이터 페이로드 가져오기

$data = JWTAuth::decode(new Token( $token))->toArray();
{
  "iss": "",
  "iat": ,
  "exp": ,
  "nbf": ,
  "jti": "",
  "sub": ,
  "prv": ""
}
response("Success",'LOGIN_SUCCESS',[
            'access_token' => $token,
            'token_type' => 'bearer',
            'expires_in' => $data['exp']
        ]);

Laravel auth 토큰 만료 시간

SESSION_LIFETIME=10080

기본값 120min in session.php

언급URL : https://stackoverflow.com/questions/41141063/set-expiry-time-for-laravel-jwt-dynamically