Токен доступа к клиенту PHP API Google

1

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

Для этого я:

1) должны войти в систему с OAuth

2) хранить токен доступа

3) создать Google_Client и предоставить ему этот токен доступа

4) используйте этот Google_Client для получения данных аналитики

Это не проблема для первого пользователя. Однако он не работает с ответом "Отказано в доступе" для второго пользователя. Вслед за PHP-кодом я обнаружил, что это связано с тем, что клиент API Google кэширует оригинальный токен доступа (в файловой системе в /var/tmp/google-api-php-client) и использует этот вместо нового доступа токен, который я предоставил.

Как запретить клиенту API Google кэшировать токен доступа в файловой системе?

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

  • 0
    Как вы решили эту проблему?
  • 0
    Смотрите мой ответ ниже. Я создал NullGoogleCache а затем использовал его с $googleClient->setCache(new NullGoogleCache())
Теги:
caching
google-analytics

4 ответа

0
Лучший ответ

Мы реализовали собственный кеш, который просто сбрасывает данные на пол:

namespace AppBundle\Factory;

use Google\Auth\CacheInterface;

class NullGoogleCache implements CacheInterface
{

    public function get($key, $expiration = false)
    {
        return false;
    }

    public function set($key, $value)
    {
        //do nothing
    }

    public function delete($key)
    {
        //do nothing
    }
}
  • 0
    Где вы реализуете этот @ Joaquim-dsouza? Вы говорите Google_Client использовать этот класс для кэширования?
  • 0
    как сказано выше @mjmarianetti, это $client->setCache($nullGoogleCache);
1

Для меня:

$client = \Google_Client();
//...        
$client->getCache()->clear();
$client->setAccessToken($access_token);

работал отлично.

0

Google рекомендует использовать "другую библиотеку кеширования", такую как StashPHP, на своей странице Github:

https://github.com/google/google-api-php-client#caching

-1

Чтобы войти в учетные записи нескольких аккаунтов Google Analytics, вы можете установить кеш Google_Client в Google_Cache_Null

Google_Client $client = new Google_Client();
....
$googleCache = new Google_Cache_Null();
$client->setCache($googleCache);

Не забудьте добавить (настроить в соответствии с вашими настройками)

use Google_Client;
use Google_Cache_Null;

Вы можете проверить каталог кеша google по умолчанию (ubuntu) с помощью:

$ ls /temp/google-api-php-client/

Информация:

Google_Client

Google_Cache_Null

  • 0
    Это решение не работает. Google_Cache_Null не существует.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню