У меня есть приложение 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);
}
Я установил срок действия AuthServiceProvider :
Passport::routes(function ($router) {
$router->forAccessTokens();
});
Passport::tokensExpireIn(now()->addMinute(1));
Passport::refreshTokensExpireIn(now()->addDays(30));
Работает, но через 1 минуту токен истекает. Мне нужна другая дата истечения срока действия токена в зависимости от того, где я пытаюсь войти в систему, потому что у меня есть веб-сайт, приложение для ПК и приложение для Android.
Например:
- веб-приложение: 8 часов
- настольное приложение: 1 год
- приложение для Android: 5 месяцев
Я думал отправить мне откуда я пытаюсь войти, но это хороший способ? Есть ли другие возможные способы сделать это?
Пока я пробовал это:
-) удалено из AuthServiceProvider:
Passport::tokensExpireIn(now()->addMinute(1));
И добавлено в функцию входа в систему:
if (request('from') == 'something') {
Passport::tokensExpireIn(now()->addYears(1));
} else {
Passport::tokensExpireIn(now()->addHours(8));
}
$proxy = Request::create('oauth/token', 'POST');