web-dev-qa-db-ja.com

laravel jwtの有効期限を動的に設定する

こんにちは、angular js with front end in satellizer and laravel with backend with tymon jwt libraryを使用しています。jwt認証を使用しています。覚えておきたい私のWebアプリの機能。laravel 'config/jwt.php。

 /*
|--------------------------------------------------------------------------
| 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週間に変更したいと思います。どうすれば動的に変更できますか?ありがとうございました。

9
user254153

次のように、expをカスタムクレームとして追加できます。

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

上記のコードは、7日間で期限切れになるトークンを作成します。 Carbonを使用する必要はありません。Unixタイムスタンプが必要なだけです。Laravelに組み込まれて以来、ここでは単純にするためにCarbonを使用しています。

7
Jamesking56

JWTFactory(1.0バージョン)を使用できます

$myTTL = 30; //minutes

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

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
2
Yoram de Langen

Tymon JWT v 1.0

ユーザーにログインするときにデフォルトのttlを上書きできます。

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

上記の答えはどれもうまくいきませんでした。なんとかこのように機能させることができました。

$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);
0
joel kithinji

Laravel auth token expire time

SESSION_LIFETIME=10080

Session.phpのデフォルト値120分

0
Lalit Baghel

JWTバージョン1.0.0-rc.2の場合、config/jwt.phpのドキュメントに非常に明確に記載されています

注:....これをnullに設定して、期限切れのないトークンを生成することもできます。一部の人々はこの行動を望んでいるかもしれません。モバイルアプリ。これは特にお勧めしません。必要に応じて、トークンを取り消すための適切なシステムがあることを確認してください。 通知:これをnullに設定する場合は、'exp'要素を削除 'required_claims'リストから削除する必要があります。

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

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

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});

新しいトークンは、対応する有効期限とともに生成されます。

0
Prakash P

以下を実行して、必要な有効期限のあるJWTトークンを生成できます。

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