こんにちは、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週間に変更したいと思います。どうすれば動的に変更できますか?ありがとうございました。
次のように、exp
をカスタムクレームとして追加できます。
$token = JWTAuth::attempt($credentials, ['exp' => Carbon\Carbon::now()->addDays(7)->timestamp]);
上記のコードは、7日間で期限切れになるトークンを作成します。 Carbon
を使用する必要はありません。Unixタイムスタンプが必要なだけです。Laravelに組み込まれて以来、ここでは単純にするためにCarbon
を使用しています。
JWTFactory
(1.0バージョン)を使用できます
$myTTL = 30; //minutes
JWTAuth::factory()->setTTL($muTTL);
$token = JWTAuth::attempt($credentials);
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
Tymon JWT v 1.0
ユーザーにログインするときにデフォルトのttlを上書きできます。
if (! $token = auth()->setTTL(1)->attempt($credentials)) {
return response()->json(['message' => 'Unauthorized user'], 401);
}
上記の答えはどれもうまくいきませんでした。なんとかこのように機能させることができました。
$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);
SESSION_LIFETIME=10080
Session.phpのデフォルト値120分
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',
],
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トークンを生成できます。
JWTAuth::customClaims(['exp' => Carbon\Carbon::now()->addDays(2)->timestamp])
->fromUser($user);