Po próbie połączenia się z urządzeniem SSL issues nadal próbuję uzyskać dostęp do konta Bloggera użytkownika za pośrednictwem interfejsu API klienta Ruby. Używam następujący:Railsy Interfejs API klienta Google - nie można wymienić tokena odświeżania tokenu dostępu
- 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)
mogę pomyślnie uwierzytelniać użytkowników i dostęp do swoich blogów przez google PI w czasie uwierzytelniania. Gdy użytkownik się loguje, przechowuje się dane od Google i otrzymuje access_token
i refresh_token
. i wszystko działa wspaniale do momentu wygaśnięcia access_token
. Próbuję zbudować funkcjonalność, która wymienia numer refresh_token
na nowy access_token
, ale wciąż pojawia się przeciwko ścianom. Używanie client documentation jako przykład, jest to kod używam:
client = Google::APIClient.new
token_pair = auth.oauth_token # access_token and refresh_token received during authentication
# Load the access token if it's 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'})
Ten kod działa doskonale podczas access_token
jest prawidłowy. Tak szybko, jak to wygasa jednak widzę 2 problemy:
- Choć wiem token straciła ważność (Sprawdziłem
expires_at
wartości w bazie danych),client.authorization.expired?
powracafalse
- czy istnieje inny sposób Mogę sprawdzić wygaśnięcie tokena oprócz wykorzystania wartości w bazie danych? - Po wymuszeniu wykonania
client.authorization.fetch_access_token!
pojawia się błądinvalid_request
.
Czy ktoś może mi powiedzieć, jak mogę wymienić refresh_token
na nowy access_token
przy użyciu interfejsu API klienta? Nawet jeśli wiesz, jak to zrobić w innym języku, byłoby to wielką pomocą, ponieważ mogę spróbować Rubyfiego. Dzięki!!
brimil01, jesteś mężczyzną !! Nie wiem nawet, dlaczego to działa, a moje inne próby nawiązywania połączeń HTTP nie, ale przyglądałem się temu przez 12 godzin, więc wymyślę to jutro. Twój kod całkowicie działa i uratowałeś mnie przed potężnym uderzeniem głową, tak bardzo docenionym. – cerrina
dziękuję. próbowałem to rozgryźć na chwilę. –
Wydaje mi się, że otrzymuję to, gdy zamieszczam to: # "invalid_request"}, @response = # , @headers = {"cache-control" => ["brak pamięci podręcznej, brak sklepu, max-age = 0, konieczność ponownej weryfikacji"], "pragma" => ["brak pamięci podręcznej"], "wygasa" => ["Pt, 01 stycznia 1990 00:00:00 GMT"], "date" => ["Środa, 27 marca 2013 08:50:48 GMT"], "typ zawartości" => ["application/json "]," x-content-type-options "=> [" nosniff "]," x-frame-options "=> [" SAMEORIGIN "]," x-xss-protection "=> [" 1; tryb = blok "]," serwer "=> [" GSE "]," połączenie "=> [" zamknij "]}> ... –