Маркер обновления паспорта 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);
}
Другие вопросы по тегам