get token, speichern, aktualisieren Sie es, wenn abgelaufen mit oauth2 gem in ruby
Ich arbeite an einem script, google Kontakte mit google-Kontakte-api gem. Ich bin in der Lage, Zugriff auf das token erfolgreich mit diesem code:
require 'rubygems'
require 'launchy'
require 'oauth2'
require 'googlecontacts'
require 'google_contacts_api'
# Get your credentials from the console
CLIENT_ID = 'your Id'
CLIENT_SECRET = 'your Secret'
OAUTH_SCOPE = 'https://www.google.com/m8/feeds'
REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob'
client = OAuth2::Client.new(CLIENT_ID, CLIENT_SECRET,site: 'https://accounts.google.com',token_url: '/o/oauth2/token', authorize_url: '/o/oauth2/auth')
url = client.auth_code.authorize_url(scope: OAUTH_SCOPE, redirect_uri: REDIRECT_URI)
Launchy.open(url)
$stdout.write "Enter authorization code: "
code = gets.chomp
token = client.auth_code.get_token(code, :redirect_uri => REDIRECT_URI)
PROBLEM:
Weiß ich, dass dies nicht der beste Weg, es zu tun, weil es anstrengend ist. jedes mal, wenn ich das Skript ausführen hat der Benutzer geben Sie Anweisungen für den Zugriff. Und auch ich habe, um manuell kopieren Sie den token aus dem browser auf das terminal.
FRAGE:
Wie kann man die speichern kann, die abgerufen token, und wenn es ist abgelaufen wie kann ich es aktualisieren?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie es aussieht bist du mit dem oauth2-Bibliothek, um die access token. Die AccessToken Klasse hat
to_hash()
undfrom_hash()
Methoden, die Sie verwenden können, zu serialisieren und Deserialisieren der token, sobald Sie ihn bekommen haben, sowie einerefresh()
Methode zum aktualisieren der access-token, sobald es abgelaufen ist. Wenn dies ist ein Kommandozeilen-Skript kann man eine versteckte Datei im home-Verzeichnis des Benutzers zu speichern, der serialisierte token.client.auth_code.get_token
Methode, die Antwort wird sein einAccessToken
Objekt. Und wie Sie sehen können in der Quellcode, diese Klasse hat alle Informationen, die Sie wollen, wietoken
,refresh_token
verjähren info, und eine Methode zum aktualisieren der auth.Während der ersten Authentifizierung, erhielten Sie eine Berechtigungs-token und refresh token.
Speichern der refresh_token (in der Sitzung, wenn es eine web-app, oder irgendeine andere "flüchtige" persistence-Schema, oder im letzten Fall in der Datenbank).
Mithilfe der refresh_token, bitten um einen neuen token wie beschrieben in Google OAuth2 WebServer-Dokumentation.
Ist dies nicht eine webserver-Anwendung, vielleicht sollten Sie erwägen, die Verwendung anderer OAuth2 Authentifizierung fließt.
Damit erhalten Sie einen refresh-token, die Sie brauchen, um die url ändern.
in OAuth2:
url = client.auth_code.authorize_url(scope: OAUTH_SCOPE, access_type: "offline", redirect_uri: REDIRECT_URI)
Dann wird es verfügbar sein, wie Erik Koleda erwähnt.