Но как мне обновить токен доступа? Я знаю, что сначала мне нужно проверить, истек ли срок действия токена, затем отправить запрос с токеном обновления и, наконец, сохранить возвращенный токен доступа.
Теперь я это сделал. создал промежуточное программное обеспечение и применил его к маршруту в 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;
Что говорит мне добавить автономный доступ, например это:
Код: Выделить всё
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