Ich verwende Google Sign-In. Ein Benutzer kommt zu meiner Site und meldet sich mit gapi.auth2.getAuthInstance().signIn()
an, oder sie sind bereits eingeloggt und wenn die Seite geladen (oder neu geladen), holen wir den Status. An diesem Punkt habe ich einen Identitätsmarker, der eine Stunde lang gültig ist und den ich auf dem Server validieren kann.Wie können abgelaufene Google Log-in-Logins aktualisiert werden?
Wenn ein Benutzer den Browser verlässt (z. B. über Nacht), läuft dieses Token ab. gapi.auth2.getAuthInstance().isSignedIn.get()
gibt true zurück, das Token wird jedoch nicht validiert.
Wie kann ich einen Benutzer anmelden und ihn anmelden, während seine Sitzung aktiv ist (dh der Browser wurde nicht geschlossen)? Oder aktualisieren Sie das Token? Alles, was graziöser ist, als die Seite neu zu laden ...
Edit: Das Refresh-Token ist keine richtige Antwort; Ich möchte keinen Offline-Zugriff (und möchte nicht um Erlaubnis fragen). Offensichtlich denkt Google, dass der Nutzer immer noch in meiner Anwendung angemeldet ist. Der Benutzer kann die Seite erneut laden und ein neues Token abrufen, ohne die Anmeldeinformationen erneut anzugeben. Sicherlich gibt es einen Mechanismus, der graziöser ist als ein versteckter Iframe, um ein aktualisiertes Token zu erhalten?
Haben Sie eine richtige Antwort gefunden? Ich habe das gleiche Problem und weiß nicht, wie ich es lösen soll. Ich ging ursprünglich auch für Refresh Tokens, wie in der Antwort vorgeschlagen, aber ich stimme zu, dass dies keine tatsächliche Lösung ist. – csvan
Noch keine Antwort, das ist verblüffend. Wenn ich etwas Freizeit habe, werde ich versuchen, eine zweite Login-Sitzung in einem versteckten iFrame zu starten und ein neues Token von dort zu ernten.In der Zwischenzeit müssen meine Benutzer ihre Seite einmal pro Stunde neu laden - yuck. – stickfigure
Die Google API versucht, ihr Zugriffstoken 5 Minuten vor Ablauf zu aktualisieren. Daher sollten die meisten aktiven Sitzungen kein Problem darstellen. Das eigentliche Problem ist, was mit [setTimeout() 'geschieht, wenn der Computer schläft] (http://stackoverflow.com/a/6347336/1462337). Auf einigen (allen?) Plattformen wird die Token-Aktualisierung bis zum Zeitpunkt des Schlummerns des Computers weiter verzögert, was wahrscheinlich der letzte Zeitpunkt des aktuellen Token-Ablaufs ist. Die von @ JacekKopecký vorgeschlagene Problemumgehung - Testen auf Ablauf und Verwenden von 'reloadAuthResponse()' - funktioniert gut. Der einzige Nachteil ist, dass dies eine undokumentierte Methode ist. – rhashimoto