Вопрос по – Google+ OAuth API хранит и получает токены после первого входа в систему и авторизации

5

Я прочитал документацию, примеры и учебные пособия по использованию API Google, у меня уже есть мини-приложение, которое показывает ваши последние действия и информацию, но я использую сеансы для хранения токена.

У меня вопрос, как я могу сохранить и извлечь токен из базы данных, чтобы, когда пользователь (который уже зарегистрировался) нажимал кнопку «Войти», он мог сразу использовать API без повторной авторизации? Обратите внимание, что я использовал пример в качестве отправной точки для своего мини-приложения.

Вот фрагмент кода:

$client = new apiClient();
$client->setApplicationName(APP_NAME);
$client->setClientId(CLIENT_ID);
$client->setClientSecret(CLIENT_SECRET);
$client->setRedirectUri(REDIRECT_URL);
$client->setDeveloperKey(DEV_KEY);

$plus = new apiPlusService($client);
$google_userinfo = new apiOauth2Service($client);

$message = "";

// In a real application this would be stored in a database, and not in the session!
if (isset($_SESSION['token']))
  $client->setAccessToken($_SESSION['token']);

$_SESSION['token'] = $client->getAccessToken();

if (isset($_GET['code'])) {
   $client->authenticate();
  // In a real application this would be stored in a database, and not in the session!
  $_SESSION['token'] = $client->getAccessToken();
  header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
}
...
 //Somewhere here, I added a function that ties $_SESSION['token'] to the user's info.
...
<form action="" method="post" id="form1" name="form1">
   <fieldset>
      <div id="main-url-section" style="width: 50%;margin: 0px auto;text-align: center;">
         <?php
            $authUrl = $client->createAuthUrl();
            print "<p><a class='login' href='$authUrl'>Log me in!</a></p>";
         ?>                                 
      </div>
    </fieldset>
</form>

Большое спасибо за помощь!

С Уважением,

Джон

Ваш Ответ

2   ответа
0

Принятый ответ работает так, что пользователь проходит через сервер Google Auth, просто не видит экран Auth. Речь шла о сохранении токена и его повторном использовании без отправки пользователя на сервер Google.

Поэтому, если это то, что вы хотите сделать (и это также позволит вам получать доступ к данным пользователя, даже если они не используют ваше приложение), все, что вам нужно сделать, - это запросить токен доступа, который включает токен обновления.

Вы делаете это, используя автономный тип доступа (который, кстати, больше не используется по умолчанию) - например, в php:$client->setAccessType("offline");.

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

Затем вы можете просто использовать этот токен доступа с клиентом, даже если срок его действия истек, и клиент позаботится о его обновлении и получении нового.

Надеюсь, это поможет, амосс

9

чтобы Google пропустил запрос авторизации для людей, которые уже авторизовали ваше приложение, добавьте этот код в блок конфигурации вверху:

$client->setAccessType("online");
$client-> setApprovalPrompt("auto");

В этом решении есть одна особенность: вы не получите токен обновления после завершения танца OAuth. Это означает, что ваши пользователи будут перенаправляться в службу аутентификации Google каждый раз, когда истекает срок действия их токена доступа, чтобы получить новый. Это будет происходить примерно каждый час.

Background Info

По умолчанию клиентская библиотека PHP настроена на предоставлениеавтономный доступ, Вы можете увидеть это висходный код, Когда этот режим включен, поток OAuth дастобновить токен это можно использовать для запроса новых токенов доступа по мере необходимости. Вы можете даже не заметить этого. Клиентская библиотека PHP позаботится обо всем этом за вас.

Однако, этот токен обновления платный. Вы несете ответственность за его хранение. Если вы потеряете его, ваш пользователь должен будет повторно авторизовать ваше приложение, чтобы вы получили еще одно. То, как вы храните его, во многом зависит от деталей вашей реализации. Данные сессий - разумный способ сделать это, если вы можете сделать их достаточно долговечными.

Error: User Rate Limit Exceeded user1239714
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы