Я так смущен OAuth и Google. Мне потребовалось много времени, чтобы получить refresh_token для создания нового access_token. Тогда узнать, что refresh_token истекает тоже? В чем смысл этого !!! ??Точки доступа Google OAuth
Все, что мне нужно сделать, это сохранить действительный access_token для использования с legato.
Вот что я вручную ввести в свой терминал, чтобы получить код OAuth:
client = OAuth2::Client.new('GA_CLIENT_ID', 'GA_SECRET_KEY', {
:authorize_url => 'https://accounts.google.com/o/oauth2/auth',
:token_url => 'https://accounts.google.com/o/oauth2/token'
})
client.auth_code.authorize_url({
:scope => 'https://www.googleapis.com/auth/analytics.readonly',
:redirect_uri => 'http://localhost',
:access_type => 'offline',
:approval_prompt=> 'force'
})
Затем я вручную ввести URL-адрес, выведенный в моем браузере. Я экспортировать возвращаемый код OAuth как к переменной окр и получить маркер доступа:
access_token = client.auth_code.get_token(ENV['GA_OAUTH_CODE'], :redirect_uri => 'http://localhost')
Тогда я могу получить доступ к access_token и refresh_token:
begin
api_client_obj = OAuth2::Client.new(ENV['GA_CLIENT_ID'], ENV['GA_SECRET_KEY'], {:site => 'https://www.googleapis.com'})
api_access_token_obj = OAuth2::AccessToken.new(api_client_obj, ENV['GA_OAUTH_ACCESS_TOKEN'])
self.user = Legato::User.new(api_access_token_obj)
self.user.web_properties.first # this tests the access code and throws an exception if invalid
rescue Exception => e
refresh_token
end
end
def refresh_token
refresh_client_obj = OAuth2::Client.new(ENV['GA_CLIENT_ID'], ENV['GA_SECRET_KEY'], {
:authorize_url => 'https://accounts.google.com/o/oauth2/auth',
:token_url => 'https://accounts.google.com/o/oauth2/token'
})
refresh_access_token_obj = OAuth2::AccessToken.new(refresh_client_obj, ENV['GA_OAUTH_ACCESS_TOKEN'], {refresh_token: ENV['GA_OAUTH_REFRESH_TOKEN']})
refresh_access_token_obj.refresh!
self.user = Legato::User.new(refresh_access_token_obj)
end
Через час, мои жетоны истекает, и у меня есть вручную запустить процесс снова из браузера! Как я могу воспроизвести это в коде?
Я не думаю, что вы нашли ответ еще. Я сталкиваюсь с той же проблемой. – juanpaco
Нет, у меня нет, но я считаю, что решение включает использование обратного вызова. Я открыл здесь более конкретный вопрос: http://stackoverflow.com/questions/16864199/how-to-configure-route-for-oauth-callback/16923267?noredirect=1#16923267. У меня еще не было возможности опробовать представленный ответ. – mnort9