2014-09-25 12 views
6

Po uwierzytelnieniu w Google Cloud Endpoints, jeśli jest kilka kont Google zalogowanych, które już dały Twojej aplikacji uprawnienia, po prostu wybiera domyślne konto, tak jak zrobi to Gmail .Google Cloud Endpoints - Przełącz użytkownika/Wymagaj ponownego logowania się

1) Gmail może przełączać konta Google w prawym górnym rogu. Jak osiągnąć coś podobnego?

2) Czy możesz wymagać od użytkownika ponownego zalogowania się na swoje konto Google, nawet jeśli są już zalogowane? Podobnie jak w przypadku zmiany ustawień konta przez użytkownika.

Odpowiedz

3

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(); 
    } 
Powiązane problemy