Kroki minimalizacji wpływu zmian zakresów na użytkowników
- Jeśli Twoja aplikacja wymaga adresu e-mail uwierzytelnionego użytkownika, a usługa
profile.emails.read
była już wcześniej używana do tego celu, użyjemail
. - Uzyskaj zatwierdzenie domeny
profile.emails.read
po zatwierdzeniu prośby o weryfikację. Więcej informacji znajdziesz w artykule Jak przesłać prośbę o weryfikację. - Unieważnij poprzedni token użytkownika do zakresu, który ma zostać usunięty, albo całkowicie odbierz dostęp do aplikacji. Na przykład token z dostępem
profile.emails.read
powinien zostać unieważniony. Zalecamy stosowanie odwołania, gdy użytkownicy korzystają z aplikacji. Dzięki temu od razu uzyskasz zgodę użytkowników. - Zachęć użytkowników do ponownego wyrażenia zgody na nowy zakres, np.
email
, bez parametruprofile.emails.read
. - Usuń zakres, który chcesz wycofać z konfiguracji ekranu zgody OAuth interfejsów API Google.
Zmiany, które musisz wprowadzić, aby przenieść witrynę z Logowania przez Google+ do Google+, zależą od wybranego procesu logowania przez Google+. Zwykle migracja wymaga zaktualizowania przycisku logowania, żądanych zakresów i instrukcji pobierania informacji o profilu z Google.
Gdy aktualizujesz przycisk logowania, nie odwołuj się do Google+ ani nie używaj koloru czerwonego. Muszą być zgodne ze zaktualizowanymi wytycznymi dotyczącymi marki.
Większość aplikacji logowania przez Google+ żądała pewnej kombinacji zakresów: plus.login
, plus.me
i plus.profile.emails.read
. Zakresy musisz zmapować w ten sposób:
Stary zakres | Nowy zakres |
---|---|
plus.login |
profile |
plus.me |
openid |
plus.profile.emails.read |
email |
Wiele osób implementujących Logowanie przez Google+ korzystało z przepływu kodu. Oznacza to, że aplikacje na Androida, iOS lub JavaScript otrzymują kod OAuth od Google, a klient wysyła go z powrotem do serwera wraz z ochroną przed fałszowaniem żądań z innych witryn. Serwer weryfikuje kod oraz uzyskuje tokeny odświeżania i dostępu, aby pobierać informacje o profilu użytkownika z interfejsu API people.get
.
Google zaleca teraz żądanie tokena identyfikatora i wysłanie go z klienta na serwer. Tokeny tożsamości mają wbudowane zabezpieczenia przed oszustwem w różnych witrynach i mogą być statycznie weryfikowane na Twoim serwerze, co pozwala uniknąć dodatkowego wywołania interfejsu API w celu pobrania z serwerów Google informacji o profilu użytkownika. Wykonaj instrukcje weryfikowania tokenów tożsamości na serwerze.
Jeśli nadal wolisz uzyskiwać informacje o profilu, korzystając z przepływu kodu. Gdy Twój serwer uzyska token dostępu, musisz uzyskać informacje o profilu użytkownika z punktów końcowych userinfo
określonych w dokumencie dotyczącym logowania dotyczącym logowania. Odpowiedź interfejsu API jest sformatowana inaczej niż odpowiedź z profilu Google+, dlatego musisz zaktualizować analizę do nowego formatu.
Przenieś przycisk logowania HTML
Jeśli przycisk logowania przez Google+ został umieszczony na stronie przez przypisanie klasy g-signin
do elementu, wprowadź te zmiany:
Podając identyfikator klienta w tagu
<meta>
, atrybuciedata-
lub obiekcie parametrów, zmień ciągclientid
naclient_id
jak w tym przykładzie:<!-- Google+ Sign-in (old) --> <meta name="google-signin-clientid" content="YOUR_CLIENT_ID">
<!-- Google Sign-in (new) --> <meta name="google-signin-client_id" content="YOUR_CLIENT_ID">
Przypisz klasę
g-signin2
do elementu przycisku logowania zamiastg-signin
. Zamiast pojedynczego wywołania zwrotnego określ też osobne wywołania zwrotne i sukcesowe, jak w tym przykładzie:<!-- Google+ Sign-in (old) --> <div class="g-signin" data-callback="signinCallback"> </div>
<!-- Google Sign-in (new) --> <div class="g-signin2" data-onsuccess="onSignIn" data-onfailure="onSignInFailure"> </div>
Zamiast jednego modułu obsługi wywołania zwrotnego zdefiniuj moduły obsługi powodzenia i niepowodzenia, jak w tym przykładzie:
// Google+ Sign-in (old) function signinCallback(authResult) { if (authResult['status']['signed_in']) { // Handle successful sign-in } else { // Handle sign-in errors console.log('Sign-in error: ' + authResult['error']); } }
// Google Sign-in (new) function onSignIn(googleUser) { // Handle successful sign-in } function onSignInFailure() { // Handle sign-in errors }
Te zmiany spowodują zaktualizowanie zakresów domyślnych do
profile email openid
. Podstawowe informacje o profilu użytkownika, takie jak imię i nazwisko, adres e-mail i adres URL zdjęcia, możesz uzyskać, korzystając z tych metod:// Google Sign-in (new) function onSignIn(googleUser) { let profile = googleUser.getBasicProfile(); let fullName = profile.getName(); let email = profile.getEmail(); let imageUrl = profile.getImageUrl(); }
Przenoszenie dynamicznie renderowanego przycisku logowania
Jeśli umieścisz na stronie przycisk logowania przez Google+, wywołując stronę gapi.signin.render()
, wprowadź te zmiany:
Podając identyfikator klienta w tagu
<meta>
, atrybuciedata-
lub obiekcie parametrów, zmień ciągclientid
naclient_id
jak w tym przykładzie:<!-- Google+ Sign-in (old) --> <meta name="google-signin-clientid" content="YOUR_CLIENT_ID">
<!-- Google Sign-in (new) --> <meta name="google-signin-client_id" content="YOUR_CLIENT_ID">
Zrenderuj przycisk logowania za pomocą parametru
gapi.signin2.render()
, a niegapi.signin.render()
, jak w tym przykładzie:// Google+ Sign-in (old) gapi.signin.render('myButton', additionalParams);
// Google Sign-in (new) gapi.signin2.render('myButton', additionalParams);
Zamiast jednego modułu obsługi wywołania zwrotnego zdefiniuj moduły obsługi powodzenia i niepowodzenia, jak w tym przykładzie:
// Google+ Sign-in (old) function signinCallback(authResult) { if (authResult['status']['signed_in']) { // Handle successful sign-in } else { // Handle sign-in errors console.log('Sign-in error: ' + authResult['error']); } }
// Google Sign-in (new) function onSignIn(googleUser) { // Handle successful sign-in } function onSignInFailure() { // Handle sign-in errors }
Te zmiany spowodują zaktualizowanie zakresów domyślnych do profile email openid
. Podstawowe informacje z profilu użytkownika możesz uzyskać za pomocą metody getBasicProfile()
.
Migracja procesu logowania inicjowanego przez JavaScript
Jeśli proces logowania został zainicjowany przez wywołanie gapi.auth.signIn()
, gdy użytkownicy klikają przycisk logowania, wprowadź te zmiany:
Podając identyfikator klienta w tagu
<meta>
, atrybuciedata-
lub obiekcie parametrów, zmień ciągclientid
naclient_id
jak w tym przykładzie:<!-- Google+ Sign-in (old) --> <meta name="google-signin-clientid" content="YOUR_CLIENT_ID">
<!-- Google Sign-in (new) --> <meta name="google-signin-client_id" content="YOUR_CLIENT_ID">
Użyj
gapi.auth2.attachClickHandler()
, aby rozpocząć proces logowania po naciśnięciu przycisku, jak w tym przykładzie:// Google+ Sign-in (old) var signinButton = document.getElementById('signinButton'); signinButton.addEventListener('click', function() { gapi.auth.signIn(additionalParams); });
// Google Sign-in (new) auth2 = gapi.auth2.init(); auth2.attachClickHandler('signinButton', additionalParams, onSignIn, onSignInFailure);
Zamiast jednego modułu obsługi wywołania zwrotnego zdefiniuj moduły obsługi powodzenia i niepowodzenia, jak w tym przykładzie:
// Google+ Sign-in (old) function signinCallback(authResult) { if (authResult['status']['signed_in']) { // Handle successful sign-in } else { // Handle sign-in errors console.log('Sign-in error: ' + authResult['error']); } }
// Google Sign-in (new) function onSignIn(googleUser) { // Handle successful sign-in } function onSignInFailure() { // Handle sign-in errors }
Te zmiany spowodują zaktualizowanie zakresów domyślnych do profile email openid
. Podstawowe informacje o profilu użytkownika możesz uzyskać przez wywołanie metody getBasicProfile()
.
Migracja hybrydowego przepływu po stronie serwera
Jeśli używasz interfejsu JavaScript API do uzyskania jednorazowego kodu autoryzacji, który musisz przekazać do serwera, wprowadź te zmiany:
Zmień zakres z
https://www.googleapis.com/auth/plus.login
naprofile
.Użyj metody
gapi.auth2.grantOfflineAccess()
z dotychczasową funkcją wywołania zwrotnego, jak w tym przykładzie:<!-- Google+ Sign-in (old) --> <div class="g-signin" data-scope="https://www.googleapis.com/auth/plus.login" data-clientid="YOUR_CLIENT_ID" data-redirecturi="postmessage" data-accesstype="offline" data-callback="signInCallback"> </div>
// Google Sign-in (new) auth2 = gapi.auth2.init({ client_id: 'YOUR_CLIENT_ID', scope: 'profile' }); ... auth2.grantOfflineAccess().then(signInCallback);
Jeśli potrzebujesz też dostępu do adresu e-mail użytkownika, dodaj email
do parametru zakresu.