Salut j'utilise angular js en front end avec satellizer et laravel au backend avec la bibliothèque tymon jwt. J'utilise l'authentification jwt. Je veux me souvenir de moi fonctionnalités de mon application Web. Je vois 'ttl' pour définir le temps d'expiration du jeton dans 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,
Par défaut, ce sera 1 heure. Mais je veux changer cela dynamiquement à 1 semaine si les clics des utilisateurs se souviennent de moi lors de la connexion. Comment puis-je le changer dynamiquement. Je vous remercie.
Vous pouvez ajouter exp
comme revendication personnalisée comme suit:
$token = JWTAuth::attempt($credentials, ['exp' => Carbon\Carbon::now()->addDays(7)->timestamp]);
Le code ci-dessus crée un jeton qui expire dans 7 jours. Vous n'avez pas besoin d'utiliser Carbon
cela nécessite juste un horodatage Unix, j'ai utilisé Carbon
ici pour plus de simplicité depuis sa construction dans Laravel.
Vous pouvez utiliser JWTFactory
(version 1.0)
$myTTL = 30; //minutes
JWTAuth::factory()->setTTL($muTTL);
$token = JWTAuth::attempt($credentials);
Je ne suis pas sûr à 100%, mais que se passe-t-il si vous définissez votre AppServiceProvider@register
la config:
config()->set('jwt.ttl', 60*60*7);
ou avec une façade:
Config::set('jwt.ttl', 60*60*7);
Pourquoi le définiriez-vous dynamiquement? Ou n'utilisez-vous pas la publication à partir de la configuration (elle ne publie pas le config/jwt.php
)?
MODIFIER:
Une autre solution serait de le régler via votre .env
fichier:
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),
Et dans .env
:
JWT_TTL=3600
Tymon JWT v 1.0
vous pouvez remplacer le ttl par défaut lorsque vous essayez de vous connecter à l'utilisateur:
if (! $token = auth()->setTTL(1)->attempt($credentials)) {
return response()->json(['message' => 'Unauthorized user'], 401);
}
Aucune des réponses ci-dessus n'a fonctionné pour moi. J'ai réussi à le faire fonctionner comme ça.
$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
Valeur par défaut 120 min dans session.php
Pour JWT version 1.0.0-rc.2, il est très clair décrit dans la documentation sur config/jwt.php
Selon la note: .... Vous pouvez également définissez ce paramètre sur null, pour générer un jeton n'expirant jamais. Certaines personnes peuvent vouloir ce comportement, par exemple une application mobile. Ce n'est pas particulièrement recommandé, alors assurez-vous que vous disposez des systèmes appropriés pour révoquer le jeton si nécessaire. Remarque: Si vous définissez ce paramètre sur null, vous devez supprimer l'élément 'exp' de la liste 'required_claims'.
'ttl' => env('JWT_TTL', 60) meaning we must set 60 to null
'required_claims' => [
'iss',
'iat',
// 'exp', <- remove this
'nbf',
'sub',
'jti',
],
Nous pouvons définir l'heure d'expiration du jeton lors de la création du jeton JWT. Il peut être défini dans le paramètre token. Par exemple
$token = array(
"iss" => "http://example.com",
"aud" => "http://example.com",
"exp" => {YOUR_EXPIRY_TIME}
);
$jwt=new JWT();
$JWT_TOKEN=$jwt->encode($token, {YOUR_KEY});
Le nouveau jeton sera généré avec l'heure d'expiration correspondante.
Vous pouvez effectuer les opérations suivantes pour générer un jeton JWT avec le délai d'expiration requis:
JWTAuth::customClaims(['exp' => Carbon\Carbon::now()->addDays(2)->timestamp])
->fromUser($user);