Маркер обновления паспорта Laravel
Я использую Laravel версии 5.5 с использованием Passport для аутентификации. Я успешно создал токен и могу получить к нему доступ, используя auth:api
промежуточное программное обеспечение.
Но всякий раз, когда пользователь входит в систему, он создает новый токен для этого пользователя. Я просто хочу обновить последний токен пользователя и отправить его обратно вместо создания нового токена.
Я использовал следующий код для генерации токена авторизации
$token = $user->createToken('string-'.$user->id)->accessToken;
Он генерирует токен с 1075 символами, но когда я проверил в таблице базы данных oauth_access_tokens
он показывает мне токен с 80 символами.
Как я могу получить последний сгенерированный токен, используя токен из 80 символов, обновить его и отправить обратно?
Заранее спасибо
1 ответ
Если ваше приложение выдает недопустимые токены доступа, пользователям необходимо обновить свои токены доступа с помощью токена обновления, который был предоставлен им при выдаче токена доступа. В этом примере мы будем использовать HTTP-библиотеку Guzzle для обновления токена:
$http = new GuzzleHttp\Client;
$response = $http->post('http://your-app.com/oauth/token', [
'form_params' => [
'grant_type' => 'refresh_token',
'refresh_token' => 'the-refresh-token',
'client_id' => 'client-id',
'client_secret' => 'client-secret',
'scope' => '',
],
]);
return json_decode((string) $response->getBody(), true);
это /oauth/token
Маршрут вернет JSON-ответ, содержащий access_token, refresh_token
, а также expires_in
атрибутов. Атрибут expires_in содержит количество секунд до истечения срока действия токена доступа.
Я сделал что-то вроде.
Создана конечная точка для предоставления токена обновления. и в моем контроллере
public function userRefreshToken(Request $request)
{
$client = DB::table('oauth_clients')
->where('password_client', true)
->first();
$data = [
'grant_type' => 'refresh_token',
'refresh_token' => $request->refresh_token,
'client_id' => $client->id,
'client_secret' => $client->secret,
'scope' => ''
];
$request = Request::create('/oauth/token', 'POST', $data);
$content = json_decode(app()->handle($request)->getContent());
return response()->json([
'error' => false,
'data' => [
'meta' => [
'token' => $content->access_token,
'refresh_token' => $content->refresh_token,
'type' => 'Bearer'
]
]
], Response::HTTP_OK);
}