在 Laravel Passport 中,可以使用不同的客户端来设置令牌的过期时间。下面是一个解决方法的代码示例:
config/auth.php
文件中,找到 guards
数组,添加一个新的 guard:'api' => [
'driver' => 'passport',
'provider' => 'users',
'hash' => false,
'expire_in' => [
'client1' => 3600, // 过期时间为1小时
'client2' => 7200, // 过期时间为2小时
],
],
app/Providers/AuthServiceProvider.php
文件的 boot
方法中,使用 Passport::tokensExpireIn()
方法来设置令牌的过期时间:use Laravel\Passport\Passport;
public function boot()
{
$this->registerPolicies();
Passport::routes();
// 设置令牌过期时间
Passport::tokensExpireIn(now()->addMinutes(config('auth.guards.api.expire_in.client1')));
// 如果有多个客户端,可以添加更多的设置
// Passport::tokensExpireIn(now()->addMinutes(config('auth.guards.api.expire_in.client2')));
}
client_id
参数来指定客户端,从而设置不同的过期时间:use Illuminate\Support\Facades\Auth;
public function issueToken(Request $request)
{
$http = new GuzzleHttp\Client;
$response = $http->post('http://your-app.com/oauth/token', [
'form_params' => [
'grant_type' => 'password',
'client_id' => $request->client_id, // 根据客户端设置不同的过期时间
'client_secret' => 'your-client-secret',
'username' => $request->username,
'password' => $request->password,
'scope' => '',
],
]);
return json_decode((string) $response->getBody(), true);
}
这样就可以根据不同的客户端设置令牌的过期时间了。