web-dev-qa-db-fra.com

Définir l'heure d'expiration pour laravel jwt dynamiquement

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.

9
user254153

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.

7
Jamesking56

Vous pouvez utiliser JWTFactory (version 1.0)

$myTTL = 30; //minutes

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

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

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);
}
1
Mahmoud Ali Kassem

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

Augmenter Laravel auth expire token expire time

SESSION_LIFETIME=10080

Valeur par défaut 120 min dans session.php

0
Lalit Baghel

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',
    ],
0
Sulung Nugroho

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.

0
Prakash P

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);
0
Vedmant