web-dev-qa-db-fra.com

Laravel Durée de vie du jeton de passeport

Je ne comprends pas ce que je fais mal ... Je ne peux pas définir le délai d'expiration du jeton.

<?php

namespace App\Providers;

class AuthServiceProvider extends ServiceProvider
{
    public function boot()
    {
        $this->registerPolicies();

        Passport::tokensExpireIn(Carbon::now()->addDays(1));
        Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));
    }
}

MAIS quand j'appelle $user->createToken(), par exemple comme ceci:

<?php
// as a demo
namespace App\Http\Middleware;

class ParseSpecialToken
{
    public function handle($request, Closure $next)
    {
        $user = User::find(1);
        $accessToken = $user->createToken('Some token')->accessToken;
        $request->headers->add(['Authorization' => 'Bearer '. $accessToken]);

        return $next($request);
    }
}

L'expiration du jeton est toujours 1 an, pas 1 jour. Pourquoi? Comment changer le temps d'exp?

8
Terion

Voici les méthodes utilisées pour mettre à jour le délai d'expiration pour tous les types d'octroi:

Jeton d'accès personnel:  

public function boot(){
        $this->registerPolicies();

        Passport::routes();
        Passport::personalAccessTokensExpireIn(Carbon::now()->addHours(24));
        Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));
}

Reste tous

public function boot(){
        $this->registerPolicies();

        Passport::routes();
        Passport::tokensExpireIn(Carbon::now()->addHours(24));
        Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));
}

Il suffit de mettre à jour le code ci-dessus dans la méthode de démarrage d'AuthServiceProvider.

3
vivek takrani

Veuillez voir cette implémentation et ici comment remplacer PassportServiceProvider par votre Cela a fonctionné pour moi avec Laravel 5.5

1
vitsen

Ah, compris que les jetons personnels ont toujours une longue durée de vie et ne peuvent pas être configurés :(

1
Terion

Les documents de passeport semblent répondre à cette question 

https://laravel.com/docs/5.6/passport#token-lifetimes

Dans la méthode boot de AuthServiceProvider, appelez Passport::tokenExpiresIn()

public function boot()
{
    $this->registerPolicies();

    Passport::routes();

    Passport::tokensExpireIn(now()->addDays(15));

    Passport::refreshTokensExpireIn(now()->addDays(30));
}
0
Sumit Anantwar

si tu fais 

$token->expires_at =
        Carbon::now()->addDays(env('PERSONAL_ACCESS_TOKEN_EXPIRY__DAYS'));

la date d'expiration n'est alors vérifiée à aucune demande, je pense donc que ce n'est pas une option valide pour les jetons personnels.

0
Carlos Rodríguez

tu peux le faire:

$tokenResult = $user->createToken('Personal Access Token');
$token = $tokenResult->token;
$token->expires_at =
        Carbon::now()->addDays(env('PERSONAL_ACCESS_TOKEN_EXPIRY__DAYS'));

$token->save();
0
maturecheese