Znalazłem sposób, ale jest trochę smutno, że ta funkcja nie jest dołączona (lub nie została udokumentowana) w gapi.auth.authorize
.
W każdym razie, jeśli otworzysz okno autoryzacji ręcznie, a następnie przetworzysz wynikowy token, możesz przekazać dodatkowe parametry, takie jak prompt=select_account
, które pozwolą użytkownikowi wybrać jego konto.
Oto przykład kodu. W przypadku blokowania wyskakujących okien, będziesz musiał wywołać tę funkcję w zdarzeniu onclick
, aby popup nie został zablokowany.
W związku z tym kod nie jest w rzeczywistości gotowy do produkcji. Nie zarządzamy sprawami, na przykład gdy użytkownik odmawia wyrażenia zgody, a my nie przekazujemy dodatkowych informacji o tokenie, takich jak czas wygaśnięcia.
var switchUserAccount = function (callback) {
var popup = window.open("https://accounts.google.com/o/oauth2/auth?client_id=102862643449-geb89aoann7dj6tsha4mtkhvos5mk01b.apps.googleusercontent.com"
+ "&prompt=select_account"
+ "&scope=https://www.googleapis.com/auth/userinfo.email"
+ "&redirect_uri=https://david-sandbox.appspot.com/autoclose.html"
+ "&access_type=online&response_type=token", "thewindow");
var waitForPopup = function() {
try {
var token = popup.location.hash.substring(14).split("&")[0];
console.log("FOund token !" + token);
if (token == "") {
console.log("Not ready yet")
setTimeout(waitForPopup, 500);
} else {
gapi.auth.setToken({access_token: token});
popup.close();
callback();
}
}
catch (e) {
console.log("Not ready yet, exception")
setTimeout(waitForPopup, 500);
}
};
waitForPopup();
}