Migracja z logowania przez Google+

Kroki pozwalające zminimalizować wpływ zmian zakresu na użytkowników

  1. Jeśli Twoja aplikacja wymaga adresu e-mail uwierzytelnionego użytkownika, a wcześniej używano do tego celu profile.emails.read, zamiast tego użyj email.
  2. Aby uzyskać zatwierdzenie domeny profile.emails.read, prześlij prośbę o weryfikację. Zapoznaj się z artykułem Jak przesłać prośbę o weryfikację.
  3. Unieważnij poprzedni token użytkownika do zakresu, który chcesz usunąć, lub całkowicie usuń dostęp do aplikacji. Na przykład token z dostępem profile.emails.read powinien zostać unieważniony. Zalecamy wycofanie zgody, gdy użytkownicy korzystają z aplikacji – wtedy od razu uzyskasz zgodę.
  4. Poproś użytkowników o ponowne wyrażenie zgody na wykorzystanie danych w ramach nowego zakresu, np. email, bez 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ść swoją witrynę z Logowania przez Google+ do Logowania przez Google, zależą od stosowanego procesu logowania przez Google+. Ogólnie rzecz biorąc, migracja wymaga zaktualizowania przycisku logowania, żądanych zakresów i instrukcji pobierania informacji o profilu z Google.

Gdy aktualizujesz przycisk logowania, nie odnosij się do Google+ ani nie używaj koloru czerwonego. Zadbaj o zgodność ze zaktualizowanymi wskazówkami dotyczącymi promowania marki.

Większość aplikacji do logowania przez Google+ wymagała kombinacji zakresów: plus.login, plus.me i plus.profile.emails.read. Musisz zmapować zakresy w następujący 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. Następnie serwer weryfikuje kod i uzyskuje tokeny odświeżania oraz tokeny dostępu umożliwiające pobieranie informacji o profilu użytkownika z interfejsu API people.get.

Google zaleca teraz żądanie tokena identyfikatora i wysłanie go od klienta na Twój serwer. Tokeny identyfikatorów mają wbudowane zabezpieczenia przed fałszowaniem informacji w różnych witrynach i mogą być weryfikowane statycznie na serwerze, co pozwala uniknąć dodatkowego wywołania interfejsu API w celu pobrania informacji o profilu użytkownika z serwerów Google. Wykonaj instrukcje weryfikowania tokenów tożsamości na serwerze.

Jeśli nadal wolisz uzyskiwać informacje o profilu za pomocą procesu kodu, możesz to zrobić. Gdy serwer będzie już miał token dostępu, musisz uzyskać informacje o profilu użytkownika z punktów końcowych userinfo określonych w dokumencie opisującym logowanie. Odpowiedź interfejsu API jest sformatowana inaczej niż odpowiedź profilu Google+, więc musisz zaktualizować ją do nowego formatu.

Migracja przycisku logowania HTML

Jeśli przycisk Logowanie przez Google+ został umieszczony na stronie przez przypisanie klasy g-signin do elementu, wprowadź te zmiany:

  • Gdy podajesz 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">
    
  • Do elementu przycisku logowania przypisz klasę g-signin2 zamiast g-signin. Zamiast pojedynczego wywołania zwrotnego określ też osobne wywołania zwrotne powodzenia i niepowodzeń, 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 pojedynczego modułu obsługi wywołania zwrotnego określ 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 zaktualizują zakresy domyślne na profile email openid. Podstawowe informacje profilowe użytkownika, takie jak imię i nazwisko, adres e-mail i adres URL zdjęcia, możesz uzyskać w ten sposób:

    // Google Sign-in (new)
    function onSignIn(googleUser) {
      let profile = googleUser.getBasicProfile();
      let fullName = profile.getName();
      let email = profile.getEmail();
      let imageUrl = profile.getImageUrl();
    }
    

Migracja dynamicznie renderowanego przycisku logowania

Jeśli umieścisz na swojej stronie przycisk Logowanie przez Google+, wywołując gapi.signin.render(), wprowadź te zmiany:

  • Gdy podajesz 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">
    
  • Renderuj przycisk logowania za pomocą 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 pojedynczego modułu obsługi wywołania zwrotnego określ 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 zaktualizują zakresy domyślne na profile email openid. Podstawowe informacje o 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 metody gapi.auth.signIn(), gdy użytkownik kliknie przycisk logowania, wprowadź te zmiany:

  • Gdy podajesz 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 pojedynczego modułu obsługi wywołania zwrotnego określ 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 zaktualizują zakresy domyślne na profile email openid. Podstawowe informacje o profilu użytkownika można uzyskać, wywołując metodę getBasicProfile().

Migracja hybrydowego przepływu po stronie serwera

Jeśli do uzyskania jednorazowego kodu autoryzacji, który należy przekazać do serwera za pomocą interfejsu JavaScript API, wprowadź te zmiany:

  • Zmień zakres z https://www.googleapis.com/auth/plus.login na profile.

  • Użyj metody gapi.auth2.grantOfflineAccess() w dotychczasowej funkcji 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 do parametru zakresu email.