如何编辑Laravel护照令牌的expires_at字段

时间:2018-08-11 15:51:02

标签: php laravel laravel-passport

我试图用expires_at像下面这样编辑token的{​​{1}}字段

middleware

在每个api请求中更新令牌的namespace App\Http\Middleware; use Carbon\Carbon; use Closure; use Auth; class Refresh { /** * @param $request * @param Closure $next * @return mixed */ public function handle($request, Closure $next) { $token = Auth::user()->token(); $expiresDate = $token->expires_at; $currentDate = Carbon::now(); $diff = date_diff_in_minutes($currentDate, $expiresDate); $baseExpire = site_config('token_expires_minutes'); if ($diff > 0 && $diff < $baseExpire) { $token->update([ 'expires_at' => (new Carbon($expiresDate))->addMinutes(intval($baseExpire - $diff)) ]); } return $next($request); } } 字段都可以正常工作。

但是令牌在第一个expires_at日期到期。

我知道我可以使用一种expires_at方法,但是刷新令牌存在一些问题,因此我不得不在不撤销令牌的情况下增加令牌的使用寿命。

您知道为什么会这样吗?我该如何解决?

1 个答案:

答案 0 :(得分:1)

根据docs,应通过在AuthServiceProvider.php方法中调用Passport::tokensExpireIn()函数在boot()中设置默认令牌生存期。

示例:

public function boot() {
    ...

    $baseExpire = site_config('token_expires_minutes');

    Passport::tokensExpireIn(now()->addMinutes($baseExpire));
}

编辑

对不起,我误解了您的原始问题。不幸的是,由于已将到期的令牌编码到实际的令牌字符串中(Laravel使用https://github.com/lcobucci/jwt来生成和验证令牌),因此无法更改已生成的令牌的到期。但是,您可以考虑覆盖护照验证以检查表上的到期时间,而不是使用默认程序包。