Ich verstehe nicht, was ich falsch mache ... Ich kann die Ablaufzeit für Token nicht einstellen.
<?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));
}
}
ABER wenn ich $user->createToken()
anrufe, zum Beispiel so:
<?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);
}
}
Der Ablauf des Token beträgt immer noch 1 Jahr und nicht 1 Tag. Warum? Wie kann man die Exp-Zeit ändern?
Hier finden Sie die Methoden zum Aktualisieren der Ablaufzeit für alle Grant-Typen:
Persönlicher Zugriffstoken:
public function boot(){
$this->registerPolicies();
Passport::routes();
Passport::personalAccessTokensExpireIn(Carbon::now()->addHours(24));
Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));
}
Alles ruhen
public function boot(){
$this->registerPolicies();
Passport::routes();
Passport::tokensExpireIn(Carbon::now()->addHours(24));
Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));
}
Aktualisieren Sie einfach den obigen Code in der Boot-Methode von AuthServiceProvider.
Die Methode createToken()
erstellt ein persönliches Zugriffstoken. Standardmäßig laufen diese Token nach 1 Jahr ab (oder nach 100 Jahren, wenn sie mit laravel/passport <= 1.0.11 erstellt wurden). Die Ablaufzeit für diesen Tokentyp wird von den Methoden Passport::tokensExpireIn()
oder Passport::refreshTokensExpireIn()
nicht geändert.
Passport Version 7.0.4 hat eine neue Methode Passport::personalAccessTokensExpireIn()
hinzugefügt, mit der Sie die Ablaufzeit für persönliche Zugriffstoken aktualisieren können. Wenn Sie mit dieser oder einer neueren Version arbeiten, können Sie diesen Methodenaufruf zu Ihrer AuthServiceProvider::boot()
-Methode hinzufügen.
Passport::personalAccessTokensExpireIn(Carbon::now()->addDays(1));
Wenn Sie noch nicht mit der Passport-Version 7.0.4 arbeiten, können Sie die Ablaufzeit für das persönliche Zugriffstoken zwar noch ändern, es handelt sich jedoch um eine manuellere Version. Sie müssen eine neue Instanz der persönlichen Zugriffsberechtigung mit der gewünschten Ablaufzeit aktivieren. Dies kann auch in Ihrer AuthServiceProvider::boot()
-Methode erfolgen.
$server = $this->app->make(\League\OAuth2\Server\AuthorizationServer::class);
$server->enableGrantType(new \Laravel\Passport\Bridge\PersonalAccessGrant(), new \DateInterval('P100Y'));
Das Ändern des Feldes expires_at
In der Datenbank hat keine Auswirkung. Das tatsächliche Ablaufdatum ist im Token selbst gespeichert. Der Versuch, die Forderung exp
im JWT-Token zu ändern, ist ebenfalls nicht möglich, da das Token signiert ist und durch jede Änderung ungültig wird. Alle Ihre vorhandenen Token haben also ihre ursprünglichen Ablaufzeiten, und es gibt keine Möglichkeit, dies zu ändern. Bei Bedarf müssen Sie neue Token neu generieren.
Bitte sehen Sie diese Implementierung und hier , wie Sie PassportServiceProvider durch Ihren ersetzen. Es hat bei mir mit Laravel 5.5 funktioniert
Ah, habe herausgefunden, dass die persönlichen Token immer von Dauer sind und dies nicht konfiguriert werden kann:
Die Passdokumente scheinen diese Frage zu beantworten
https://laravel.com/docs/5.6/passport#token-lifetimes
In der boot
-Methode von AuthServiceProvider
rufen Sie Passport::tokenExpiresIn()
auf.
public function boot()
{
$this->registerPolicies();
Passport::routes();
Passport::tokensExpireIn(now()->addDays(15));
Passport::refreshTokensExpireIn(now()->addDays(30));
}
Ja, ich habe gerade einen Tag verschwendet, um dieses Problem in VERSION = '5.8' zu finden.
Im Moment müssen wir vielleicht modifizieren your-project/vendor/laravel/passport/src/Passport.php.
D ---> bedeutet Tag Y ---> bedeutet Jahr M ---> bedeutet Monat
drei Arten von Token im Pass
1.tokensExpireIn in Zeile 303.
personalAccessTokensExpireIn in Zeile 341.
refreshTokensExpireIn in Zeile 322.
wenn Sie tun
$token->expires_at =
Carbon::now()->addDays(env('PERSONAL_ACCESS_TOKEN_EXPIRY__DAYS'));
dann wird das Verfallsdatum bei keiner Anforderung überprüft, daher denke ich, dass es keine gültige Option für persönliche Token ist.
du kannst das:
$tokenResult = $user->createToken('Personal Access Token');
$token = $tokenResult->token;
$token->expires_at =
Carbon::now()->addDays(env('PERSONAL_ACCESS_TOKEN_EXPIRY__DAYS'));
$token->save();