Как сохранить объект клиента Google API (массив access_token) с автономным доступом и использовать его повторно - PullRequest
1 голос
/ 25 февраля 2020

После google-api- php -клиент => документация Мне удалось получить массив $token = $client->fetchAccessTokenWithAuthCode($authorization_code);:

$token array:6 [▼ ▼
  "access_token" => "***"
  "expires_in" => 3599
  "refresh_token" => "***"
  "scope" => "https://www.googleapis.com/auth/drive openid https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile"
  "token_type" => "Bearer"
  "id_token" => "***"
]

Я использовал $client->setAccessType("offline");, поэтому я получил "refresh_token" => "***"

В документации упоминается:

Если вы используете клиентскую библиотеку Google API, клиентский объект обновляет маркер доступа по мере необходимости, пока вы настраиваете этот объект для автономного доступа.

Я понимаю, что для доступа к Google API без взаимодействия с пользователем мне нужно сделать:

$client = new Google_Client();
$client->setAccessToken($token);

Где $token - это массив выше. И тогда я могу делать вызовы API.

1) Как мне сохранить этот массив $token? Нужно ли хранить только refresh_token? И если да, то как мне перестроить массив $token, чтобы метод setAccessToken() принимал его?

2) Где хранить данные массива? В базе данных или где-то еще?

1 Ответ

0 голосов
/ 25 февраля 2020

Вам действительно нужно хранить токен refre sh. Где вы храните, это зависит от вас, но это должно быть какое-то безопасное место, и вы должны указать пользователя, к которому прикреплен токен refre sh. Так что вы можете быть уверены, что вы не показываете пользователю данные пользователя b, потому что вы перепутали их refre sh токены.

Мне известно, что я просто храню их в папке.

function getGoogleClient() {
    $client = getOauth2Client();

    // Refresh the token if it's expired.
    if ($client->isAccessTokenExpired()) {
        $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
        file_put_contents($credentialsPath, json_encode($client->getAccessToken()));
    }
return $client;
}
...