我试图用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
方法,但是刷新令牌存在一些问题,因此我不得不在不撤销令牌的情况下增加令牌的使用寿命。
您知道为什么会这样吗?我该如何解决?
答案 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来生成和验证令牌),因此无法更改已生成的令牌的到期。但是,您可以考虑覆盖护照验证以检查表上的到期时间,而不是使用默认程序包。