Migracja z logowania przez Google+

Kroki minimalizacji wpływu zmian zakresów na użytkowników

  1. 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żyj email.
  2. 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ę.
  3. 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.
  4. Zachęć użytkowników do ponownego wyrażenia zgody na nowy zakres, np. email, bez parametru profile.emails.read.
  5. 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>, atrybucie data- lub obiekcie parametrów, zmień ciąg clientid na client_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 zamiast g-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>, atrybucie data- lub obiekcie parametrów, zmień ciąg clientid na client_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 nie gapi.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>, atrybucie data- lub obiekcie parametrów, zmień ciąg clientid na client_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 na profile.

  • 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.