我不知道我做错了什么。我无法设置令牌过期时间。
<?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时间?
以下是用于更新所有授权类型的到期时间的方法:
个人访问令牌:
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的启动方法中更新上面的代码即可。
Passport文档似乎回答了这个问题
https://laravel.com/docs/5.6/passport#token-lifetimes
在boot
的AuthServiceProvider
方法中称Passport::tokenExpiresIn()
public function boot()
{
$this->registerPolicies();
Passport::routes();
Passport::tokensExpireIn(now()->addDays(15));
Passport::refreshTokensExpireIn(now()->addDays(30));
}
请参阅this implementation和here如何用你的替换PassportServiceProvider。它适用于Laravel 5.5
啊,想通了个人令牌总是很长寿,这不能配置:(
你可以这样做:
$tokenResult = $user->createToken('Personal Access Token');
$token = $tokenResult->token;
$token->expires_at =
Carbon::now()->addDays(env('PERSONAL_ACCESS_TOKEN_EXPIRY__DAYS'));
$token->save();
如果你这样做
$token->expires_at =
Carbon::now()->addDays(env('PERSONAL_ACCESS_TOKEN_EXPIRY__DAYS'));
那么在任何请求都不会检查到期日期,所以我认为它不是个人令牌的有效选项。
createToken()
方法创建个人访问令牌。默认情况下,这些令牌在1年后过期(或者如果由laravel / passport <= 1.0.11创建,则为100年)。 Passport::tokensExpireIn()
或Passport::refreshTokensExpireIn()
方法不会修改此类令牌的到期时间。
Passport版本7.0.4添加了一个新方法Passport::personalAccessTokensExpireIn()
,它允许您更新个人访问令牌的到期时间。如果您使用的是此版本或更高版本,则可以将此方法调用添加到AuthServiceProvider::boot()
方法中。
Passport::personalAccessTokensExpireIn(Carbon::now()->addDays(1));
如果您尚未使用护照版本7.0.4,您仍然可以修改个人访问令牌到期时间,但它更加手动。您需要使用所需的到期时间启用个人访问授权的新实例。这也可以在你的AuthServiceProvider::boot()
方法中完成。
$server = $this->app->make(\League\OAuth2\Server\AuthorizationServer::class);
$server->enableGrantType(new \Laravel\Passport\Bridge\PersonalAccessGrant(), new \DateInterval('P100Y'));
修改数据库中的expires_at
字段将不会执行任何操作。实际到期日期存储在令牌本身内。此外,尝试修改JWT令牌中的exp
声明将不起作用,因为令牌已签名,对其进行的任何修改都将使其无效。因此,所有现有令牌都将具有原始到期时间,并且无法更改。如果需要,您将需要重新生成新令牌。
文件: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);
}
是的,我只是浪费了一天才能在VERSION ='5.8'中找到这个问题。
目前,我们可能需要修改你的项目/供应商/ laravel / passport / src / Passport.php。
D --->表示日Y --->表示年M --->表示月
护照上有三种令牌
1.tokensExpireIn在303行。