webentwicklung-frage-antwort-db.com.de

Laravel Lebensdauer des Reisepasses

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?

8
Terion

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.

3
vivek takrani

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.

laravel/pass> = 7.0.4

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

laravel/pass <7.0.4

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'));

Hinweis

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.

1
patricus

Bitte sehen Sie diese Implementierung und hier , wie Sie PassportServiceProvider durch Ihren ersetzen. Es hat bei mir mit Laravel 5.5 funktioniert

1
vitsen

Ah, habe herausgefunden, dass die persönlichen Token immer von Dauer sind und dies nicht konfiguriert werden kann:

1
Terion

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));
}
0
Sumit Anantwar

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.

Ändern Sie dies -----> neues Datumsintervall ('P1Y'). Es ist eine PHP-Funktion Repräsentiert ein Datumsintervall.

D ---> bedeutet Tag Y ---> bedeutet Jahr M ---> bedeutet Monat

drei Arten von Token im Pass

1.tokensExpireIn in Zeile 303.

  1. personalAccessTokensExpireIn in Zeile 341.

  2. refreshTokensExpireIn in Zeile 322.

0
Kapil Pal

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.

0

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();
0
maturecheese