Обновление токенов доступа с помощью Laravel и SocialitePhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Обновление токенов доступа с помощью Laravel и Socialite

Сообщение Anonymous »

Приложение, над которым я работаю, имеет функцию рассылки. Когда я попытался отправить письмо спустя более часа после входа в систему, меня встретила ошибка. Срок действия токена доступа истек, и вам придется снова войти в систему.

Но как мне обновить токен доступа? Я знаю, что сначала мне нужно проверить, истек ли срок действия токена, затем отправить запрос с токеном обновления и, наконец, сохранить возвращенный токен доступа.

Теперь я это сделал. создал промежуточное программное обеспечение и применил его к маршруту в web.php, вот так:

Код: Выделить всё

Route::get('create', 'EmployeeController@create')
->middleware('refresh');
Тогда в промежуточном программном обеспечении у меня есть следующий код:

Код: Выделить всё

public function handle($request, Closure $next)
{
dump(session('user'));
$client = new Google_Client();
$client->setAccessToken(['access_token' => session('user')->token, 'expires_in' => session('user')->expiresIn]);
$_SESSION['token'] = $client->getAccessToken();
$client->setAccessToken($_SESSION['token']);
if( $client->isAccessTokenExpired() ) {
echo "expired";
}
else {
echo "not expired";
}
return $next($request);
}
Я осознаю, что это не дает ничего даже близкого к тому, что я хочу. Но когда я вхожу в систему, мне всегда кажется, что срок действия истек, даже когда я только что вошел в систему. Я думаю, это потому, что я не указал дату и время истечения срока действия, но я не знаю, как настроить его так, чтобы он выглядел как светский человек, поддерживает только эти базовые функции:

Код: Выделить всё

$token = $user->token;
$refreshToken = $user->refreshToken; // not always provided
$expiresIn = $user->expiresIn;
Ближе всего к моей проблеме я смог найти следующий вопрос: Как я могу управлять токенами обновления OAuth с помощью Laravel?
Что говорит мне добавить автономный доступ, например это:

Код: Выделить всё

return Socialite::driver('google')->scopes([ 'email', 'profile', 'https://www.googleapis.com/auth/gmail.compose' ])
->with(["access_type" => "offline", "prompt" => "consent select_account"])
->redirect();
Однако это мне не особо помогает, так как я не знаю, что делать дальше и действительно ли это необходимо.
Я не удивлюсь, если пропущу что-то очевидное или сделаю что-то невероятно глупое, но здесь я действительно упираюсь в стену.

Изменить:
Теперь я понимаю, что вместо светского человека мне, вероятно, следует использовать Google API, поскольку я использовал его для входа в систему в первую очередь. Теперь у меня есть следующий код:

Код: Выделить всё

public function handle($request, Closure $next)
{
dump(session('user'));
$client = new Google_Client();
$client->setAccessToken(['access_token' => session('user')->token, 'expires_in' => session('user')->expiresIn]);
$client->setAccessType('offline');
$refreshToken = Auth::User()->remember_token;
$token = session('user')->token;
$client->revokeToken();
$client->refreshToken($refreshToken);
$newToken=$client->getAccessToken();
echo "old token:
" . $token . "
New token:
";
print_r($newToken);
echo "
refreshToken:
" . $refreshToken . "
" . "client accestoken:
";
session('user')->accessToken = $newToken;
print_r(session('user')->accessToken);
dump($client);
return $next($request);
}
Однако токен доступа не меняется, почему бы и нет?

Подробнее здесь: https://stackoverflow.com/questions/415 ... -socialite
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»