Ich nutze den OAuth 2.0-Flow der Google Identity Platform, um ein Javascript/HTML-Lehrerbeobachtungsformular zu autorisieren, um in ein Google-Tabellen-Dokument zu schreiben. Alles funktioniert gut die meiste Zeit; In der letzten Nacht jedoch hat einer unserer Principals folgende Fehlermeldung angezeigt:Google OAuth 2-Zugriffstoken funktioniert einige Stunden nach der Autorisierung nicht wie erwartet
"Anfrage hatte ungültige Authentifizierungsdaten. Erwartetes OAuth 2-Zugriffstoken, Login-Cookie oder andere gültige Authentifizierungsinformationen. Siehe https://developers.google.com/identity/sign-in/web/devconsole-project."
Ich stellte fest, dass er das Beobachtungswerkzeug am Nachmittag gestartet hatte, und jetzt vielleicht fünf Stunden später versuchte, auf den Submit-Button zu klicken. Meine Vermutung war, dass der Token abgelaufen war, aber aus der Dokumentation von Google scheint es, als würde die JS-Auth-Bibliothek das Zugriffstoken bei Bedarf aktualisieren - ich glaube, es ist eigentlich nicht möglich, ein Aktualisierungstoken zu erhalten, um manuell etwas zu tun.
Ich verwende, was im Wesentlichen der Beispiel-Auth-Code ist, und die App reagiert darauf, ordnungsgemäß abgemeldet zu werden. Das heißt, wenn ich mich auf einer anderen Registerkarte abmelde, wird die Schaltfläche "Senden" deaktiviert und die Schaltfläche "Anmelden" wird erneut angezeigt. Unter der Annahme, dass der Tokenablauf abgelaufen ist, sollten Sie sich Gedanken darüber machen, wie Sie das Token korrekt ablaufen lassen und einen neuen anfordern können, idealerweise ohne Benutzerinteraktion? Oder wenn es kein Ablaufproblem ist, was könnte es sonst noch sein? Dieser Benutzer hat erfolgreich Daten in früheren Beobachtungen übermittelt. Es war nur dieses eine Mal, als er während dieser Zeit ~ 5 Stunden (möglicherweise Verlust der Internetverbindung/Schlafen seines Laptops) wartete.
Hier ist der Auth-Code:
var clientId = ""; //id removed
var discoveryDocs = ["https://sheets.googleapis.com/$discovery/rest?version=v4"];
var scopes = "https://www.googleapis.com/auth/spreadsheets";
var authorizeButton = document.getElementById('authorize-button');
function handleClientLoad() {
gapi.load('client:auth2', initClient);
}
function initClient() {
gapi.client.init({
discoveryDocs: discoveryDocs,
clientId: clientId,
scope: scopes
}).then(function() {
gapi.auth2.getAuthInstance().isSignedIn.listen(updateSigninStatus);
updateSigninStatus(gapi.auth2.getAuthInstance().isSignedIn.get());
authorizeButton.onclick = handleAuthClick;
});
}
function updateSigninStatus(isSignedIn) {
if (isSignedIn) {
authorizeButton.style.display = 'none';
document.getElementById('submit').disabled = false;
findRow(); //find the empty row once we're logged in
} else {
authorizeButton.style.display = 'block';
document.getElementById('submit').disabled = true;
}
}
function handleAuthClick(event) {
gapi.auth2.getAuthInstance().signIn();
}
Thank you!
Ich glaube nicht, dass dies das Problem ist, dem ich gegenüberstehe - das Tool hat eine statische Produktions-URL und es funktioniert konsistent von der gleichen URL. Ich habe jetzt festgestellt, dass die Zugriffstokens nach einer Stunde ablaufen, und während die JS-Bibliothek diese automatisch aktualisieren soll, passiert das möglicherweise nicht korrekt, wenn der Computer im Ruhezustand oder offline ist. Ich schaue auf https: // stackoverflow.com/questions/32150845/how-to-refresh-expired-google-anmelden-logins jetzt als eine Möglichkeit, eine Aktualisierung erzwingen, wenn das Token abgelaufen ist! –