Я разрабатываю веб-приложение, которое извлекает и отображает данные 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 не создает новый кеш запись для каждого токена доступа.)
Мы реализовали собственный кеш, который просто сбрасывает данные на пол:
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
}
}
$client->setCache($nullGoogleCache);
Для меня:
$client = \Google_Client();
//...
$client->getCache()->clear();
$client->setAccessToken($access_token);
работал отлично.
Google рекомендует использовать "другую библиотеку кеширования", такую как StashPHP, на своей странице Github:
Чтобы войти в учетные записи нескольких аккаунтов 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/
Информация:
NullGoogleCache
а затем использовал его с$googleClient->setCache(new NullGoogleCache())