Laravel Passport令牌生命周期

问题描述 投票:8回答:7

我不知道我做错了什么。我无法设置令牌过期时间。

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

但是当我打电话给$user->createToken()时,例如:

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

令牌到期仍为1年,而不是1天。为什么?如何更改exp时间?

php laravel oauth-2.0 laravel-5.4 laravel-passport
7个回答
11
投票

以下是用于更新所有授权类型的到期时间的方法:

个人访问令牌:

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

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

休息一下

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

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

只需在AuthServiceProvider的启动方法中更新上面的代码即可。


1
投票

Passport文档似乎回答了这个问题

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

bootAuthServiceProvider方法中称Passport::tokenExpiresIn()

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

    Passport::routes();

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

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

1
投票

请参阅this implementationhere如何用你的替换PassportServiceProvider。它适用于Laravel 5.5


0
投票

啊,想通了个人令牌总是很长寿,这不能配置:(


0
投票

你可以这样做:

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

$token->save();

0
投票

如果你这样做

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

那么在任何请求都不会检查到期日期,所以我认为它不是个人令牌的有效选项。


0
投票

createToken()方法创建个人访问令牌。默认情况下,这些令牌在1年后过期(或者如果由laravel / passport <= 1.0.11创建,则为100年)。 Passport::tokensExpireIn()Passport::refreshTokensExpireIn()方法不会修改此类令牌的到期时间。

laravel/passport >= 7.0.4

Passport版本7.0.4添加了一个新方法Passport::personalAccessTokensExpireIn(),它允许您更新个人访问令牌的到期时间。如果您使用的是此版本或更高版本,则可以将此方法调用添加到AuthServiceProvider::boot()方法中。

Passport::personalAccessTokensExpireIn(Carbon::now()->addDays(1));

laravel/passport < 7.0.4

如果您尚未使用护照版本7.0.4,您仍然可以修改个人访问令牌到期时间,但它更加手动。您需要使用所需的到期时间启用个人访问授权的新实例。这也可以在你的AuthServiceProvider::boot()方法中完成。

$server = $this->app->make(\League\OAuth2\Server\AuthorizationServer::class);
$server->enableGrantType(new \Laravel\Passport\Bridge\PersonalAccessGrant(), new \DateInterval('P100Y'));

Note

修改数据库中的expires_at字段将不会执行任何操作。实际到期日期存储在令牌本身内。此外,尝试修改JWT令牌中的exp声明将不起作用,因为令牌已签名,对其进行的任何修改都将使其无效。因此,所有现有令牌都将具有原始到期时间,并且无法更改。如果需要,您将需要重新生成新令牌。


0
投票

文件:AuthServiceProvider.php

添加这些行

use Laravel\Passport\Bridge\PersonalAccessGrant;
use League\OAuth2\Server\AuthorizationServer;

在引导功能中添加以下代码

public function boot() {
     Passport::routes();
     $lifetime = new \DateInterval('PT24H'); // For 24hours

     $this->app->get(AuthorizationServer::class)->enableGrantType(new PersonalAccessGrant(), $lifetime);
}

0
投票

是的,我只是浪费了一天才能在VERSION ='5.8'中找到这个问题。

目前,我们可能需要修改你的项目/供应商/ laravel / passport / src / Passport.php。

改变这个-----> new DateInterval('P1Y')。它是php函数表示日期间隔。

D --->表示日Y --->表示年M --->表示月

护照上有三种令牌

1.tokensExpireIn在303行。

  1. personalAccessTokensExpireIn在341行。
  2. 在322行中的refreshTokensExpireIn。
© www.soinside.com 2019 - 2024. All rights reserved.