После борьбы с некоторыми проблемами SSL на моей машине я все еще пытаюсь получить доступ к учетной записи пользователя Blogger с помощью API клиента Google Ruby. Я использую следующее:
- Rails 3.2.3
- Ruby 1.9.3
- oauth2 (0.8.0)
- omniauth (1.1.1)
- omniauth-google-oauth2 (0.1.13)
- google-api-client (0.4.6)
Я могу успешно аутентифицировать пользователей и получать доступ к их блогам через API Google во время проверки подлинности. Когда пользователь входит в систему, я сохраняю access_token
и refresh_token
, которые я получаю от Google. и все работает отлично, пока истечет access_token
. Я пытаюсь создать функциональность, которая обменивает refresh_token
для нового access_token
, но все равно прижимается к стенам. Используя клиентскую документацию в качестве примера, это код, который я использую:
client = Google::APIClient.new
token_pair = auth.oauth_token # access_token and refresh_token received during authentication
# Load the access token if it available
if token_pair
client.authorization.update_token!(token_pair.to_hash)
end
# Update access token if expired
if client.authorization.refresh_token && client.authorization.expired?
client.authorization.fetch_access_token!
end
blogger = client.discovered_api('blogger', 'v3')
result = client.execute(
api_method: blogger.blogs.list_by_user,
parameters: {'userId' => "self", 'fields' => 'items(description,id,name,url)'},
headers: {'Content-Type' => 'application/json'})
Этот код работает отлично, пока access_token
действителен. Как только он истекает, я вижу 2 проблемы:
- Даже если я знаю, что токен истек (я проверил значение
expires_at
в базе данных),client.authorization.expired?
возвращаетfalse
- есть ли другой способ проверить истечение токена, используя значение в базе данных? - Когда я принудительно выполняю выполнение
client.authorization.fetch_access_token!
, я получаю ошибкуinvalid_request
.
Может кто-нибудь, пожалуйста, дайте мне знать, как я могу обменять refresh_token
на новый access_token
с помощью клиентского API? Даже если вы знаете, как это сделать на другом языке, это будет большой помощью, так как я могу попробовать Rubyfy. Спасибо!!