fetch_access_token! in Google-API — "Missing authorization code."
Ich bin mit dem Google-API-Ruby-Client erhalten Sie Zugang zu den Kalendern der Nutzer.
Bekomme ich Zugriff mit:
client_id: "xxxxx"
client_secret: "xxxxx"
access_type: "offline"
approval_type: ""
scope: "https://www.google.com/calendar/feeds/https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/calendar"
callback_path: "/app/oauth_response"
provider :google_oauth2, GOOGLE_API['client_id'], GOOGLE_API['client_secret'],
{ access_type: GOOGLE_API['access_type'],
approval_prompt: GOOGLE_API['approval_prompt'],
scope: GOOGLE_API['scope'],
callback_path: GOOGLE_API['callback_path'],
path_prefix: GOOGLE_API['path_prefix']}
Wenn die Antwort kommt zurück, es hat eine refresh-token, access token, expired_at, etc. Ich bin dann in der Lage, um API-Anfragen mit dem access code. Aber einmal, dass der Zugangscode abgelaufen ist (nach einer Stunde), ich glaube, ich muss der refresh-token, um ein neues Zugriffstoken, richtig?
Hier ist der Anruf, den ich mache:
HTTParty.get('https://www.google.com/calendar/feeds/default/owncalendars/full', :query => {:alt => "jsonc", :access_token => access_token})
Was mir sagt, dass mein token abgelaufen. Also versuche ich ein neues zu erhalten.
Aber wenn ich versuche zu tun, dass ich dieses:
@client.authorization.fetch_access_token!
ArgumentError Exception: Missing authorization code.
Sehe ich, dass in meinem @client object, @code=nil. Ich gehe davon aus, dass das, was gesetzt werden muss, aber ich bekomme nicht einen 'code' - Eigenschaft zurück von meiner ersten Anfrage.
Wie Schaffe ich es, dass code, oder wenn ich brauche es nicht, was mache ich falsch?
Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wahrscheinlich die die refresh-token nicht in @client.die Autorisierung an der Stelle, die Sie aufrufen fetch_access_token!
Werfen Sie einen Blick auf https://github.com/google/signet/blob/master/lib/signet/oauth_2/client.rb
Dass die Fehlermeldung nur erscheint im Herbst durch eine unbekannte/unbekannter grant_type. grant_type selbst abgeleitet, basierend auf den Zustand des authorization client.
In Ihrem Fall verwenden, versuchen, zu aktualisieren, ein token, es sollte "refresh_token" und grant_type zurück, dass Wert, wenn ein refresh_token eingestellt ist. Meine Vermutung ist, wenn Sie einen dump der Wert von @client.die Autorisierung.refresh_token und @client.die Autorisierung.grant_type Sie werden beide auf null.
Fix wäre, nur um sicherzustellen, dass Sie ordnungsgemäß wiederherstellen der refresh_token vor dem Aufruf dieser Methode.
Die Ruby client-Bibliothek übernimmt automatisch eine neue access-token von der refresh-token-wenn der bisherige abgelaufen ist, so brauchen Sie nicht, alles zu tun, behandeln diesen Fall.
Im client gibt es folgenden code (https://github.com/google/signet/blob/621515ddeec1dfb6aef662cdfaca7ab30e90e5a1/lib/signet/oauth_2/client.rb#L935), so müssen Sie entfernen aredirect_uri, wenn Sie nicht wollen, um access-token.
if self.redirect_uri
# Grant type was intended to be `authorization_code` because of
# the presence of the redirect URI.
raise ArgumentError, 'Missing authorization code.'
end