Dopo aver lottato con alcuni SSL issues sul mio computer, sto ancora tentando di accedere all'account Blogger di un utente tramite l'API di Google Ruby Client. Sto usando il seguente:- impossibile scambiare un token di aggiornamento per token di accesso
- Rails 3.2.3
- Rubino 1.9.3
- OAuth2 (0.8.0)
- omniauth (1.1.1)
- omniauth-google-OAuth2 (0.1.13)
- google-api-client (0.4.6)
mi può autenticare con successo gli utenti e accedere ai propri blog attraverso il Google A PI al momento dell'autenticazione. Quando un utente effettua l'accesso, memorizzo access_token
e refresh_token
da Google. e tutto funziona alla grande fino allo scadere del access_token
. Sto cercando di costruire la funzionalità che scambia il refresh_token
per un nuovo access_token
, ma continui a venire contro i muri. Utilizzando la client documentation come esempio, questo è il codice che sto utilizzando:
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'})
Questo codice funziona perfettamente mentre il access_token
è valido. Non appena scade però, mi sto vedendo 2 problemi:
- Anche se so che il token è scaduto (ho controllato
expires_at
valore nel database),client.authorization.expired?
rendimentifalse
- c'è un modo diverso Posso controllare la scadenza del token oltre a usare il valore nel database? - Quando imposto l'esecuzione di
client.authorization.fetch_access_token!
, viene visualizzato un erroreinvalid_request
.
Qualcuno può per favore fatemelo sapere come posso scambiare un refresh_token
per un nuovo access_token
utilizzando l'API client? Anche se sapessi come farlo in un'altra lingua, sarebbe un grande aiuto in quanto posso quindi provare a Rubyfy. Grazie!!
brimil01, sei l'uomo !! Non so nemmeno perché funzioni e gli altri miei tentativi di effettuare chiamate HTTP no, ma l'ho guardato per 12 ore, quindi lo scoprirò domani. Il tuo codice funziona totalmente e tu mi hai salvato da un enorme head-banging, molto apprezzato. – cerrina
grazie. ho cercato di capirlo per un po '. –
Mi sembra di ottenere questo quando inserisco questo: # "invalid_request"}, @response = # , @headers = {"cache-control" => ["no-cache, no-store, max-age = 0, must-revalidate"], "pragma" => ["no-cache"], "scade" => ["Fri, 01 Jan 1990 00:00:00 GMT"], "date" => ["Mer 27 mar 2013 08:50:48 GMT"], "content-type" => ["application/json "]," x-content-type-options "=> [" nosniff "]," x-frame-options "=> [" SAMEORIGIN "]," x-xss-protection "=> [" 1; modalità = block "]," server "=> [" GSE "]," connection "=> [" close "]}> ... –