根据客户端Laravel Passport的不同令牌到期

Lor*_*rti 6 php laravel laravel-passport

我有一个使用Passport身份验证的Laravel应用程序.

登录

public function authenticate(Request $request)
{
    $params = [
        'grant_type' => 'password',
        'client_id' => 1,
        'client_secret' => "secret",
        'username' => request('username'),
        'password' => request('password'),
        'active' => 1,
        'scope' => '*'
    ];

    $request->request->add($params);

    // verify the credentials and create a token for the user
    $proxy = Request::create('oauth/token', 'POST');

    return Route::dispatch($proxy);
}
Run Code Online (Sandbox Code Playgroud)

我已经解决了AuthServiceProvider的到期问题:

Passport::routes(function ($router) {
   $router->forAccessTokens();
});
Passport::tokensExpireIn(now()->addMinute(1));
Passport::refreshTokensExpireIn(now()->addDays(30));
Run Code Online (Sandbox Code Playgroud)

它可以工作,但1分钟后令牌到期.我想要一个不同的令牌到期日期,具体取决于我尝试登录的位置,因为我有一个网站,桌面应用程序和一个Android应用程序.

例如:

  • 网络应用程序:8小时
  • 桌面应用:1年
  • Android应用程序:5个月

我想从我试图登录的地方发送给我,但这是一个好方法吗?还有其他可能的方法吗?

现在我试过这个:

- )从AuthServiceProvider中删除:

Passport::tokensExpireIn(now()->addMinute(1));
Run Code Online (Sandbox Code Playgroud)

并在登录功能中添加:

if (request('from') == 'something') {
    Passport::tokensExpireIn(now()->addYears(1));
} else {
    Passport::tokensExpireIn(now()->addHours(8));
}

$proxy = Request::create('oauth/token', 'POST');
Run Code Online (Sandbox Code Playgroud)

Ada*_*att 6

您可以从以下链接获得帮助,请找到

获取用户代理详细信息并根据代理应用条件

例如,您可以使用如下代码

if ( Agent::isDesktop() ) {
    Passport::tokensExpireIn(now()->addYears(1));
} else if(Agent::isMobile()){
    Passport::tokensExpireIn(now()->addMonth(5));
}else{
    Passport::tokensExpireIn(now()->addHours(8));
}
Run Code Online (Sandbox Code Playgroud)