Migracja z logowania przez Google+

Jak zminimalizować wpływ zmian zakresu na użytkowników

  1. Jeśli Twoja aplikacja wymaga adresu e-mail uwierzytelnionego użytkownika, a do tej pory używałeś do tego celu funkcji profile.emails.read, użyj zamiast niej funkcji email.
  2. Uzyskaj zatwierdzenie dla profile.emails.read z zatwierdzoną prośbą o weryfikację. Zapoznaj się z artykułem Jak przesłać prośbę o weryfikację.
  3. Unieważnij token poprzedniego użytkownika w zakresie, który ma zostać usunięty, lub całkowicie usuń dostęp do aplikacji. Na przykład należy cofnąć token z dostępem profile.emails.read. Zalecamy, aby cofnąć zgodę, gdy użytkownicy są w aplikacji, dzięki czemu możesz od razu uzyskać ich zgodę.
  4. Poproś użytkowników o ponowne wyrażenie zgody na wykorzystanie danych w nowym zakresie, np. email, bez profile.emails.read.
  5. Usuń zakres, który ma zostać wycofany, z konfiguracji ekranu akceptacji OAuth interfejsów API Google.

Zmiany, które musisz wprowadzić, aby przenieść witrynę z logowania przez Google+ na logowanie przez Google, zależą od tego, którego procesu logowania przez Google+ używasz. Migracja wymaga zaktualizowania przycisku logowania, zakresów uprawnień i instrukcji dotyczących pobierania informacji o profilu z Google.

Podczas aktualizowania przycisku logowania nie odwołuj się do G+ ani nie używaj koloru czerwonego. być zgodne z naszych zaktualizowanymi wskazówkami dotyczącymi promowania marki;

Większość aplikacji wymagających logowania się w Google+ prosi o dostęp do następujących zakresów: plus.login, plus.meplus.profile.emails.read. Musisz zmienić zakresy w ten sposób:

Stary zakres Nowy zakres
plus.login profile
plus.me openid
plus.profile.emails.read email

Wielu implementatorów funkcji Logowanie przez Google+ używało procesu kodu. Oznacza to, że aplikacje na Androida, iOS lub JavaScript uzyskują od Google kod OAuth, a klient wysyła ten kod z powrotem na serwer wraz z ochroną przed fałszowaniem żądań między witrynami. Następnie serwer weryfikuje kod i uzyskiwanie tokenów odświeżania i dostępu, aby pobierać informacje profilowe użytkownika z interfejsu API people.get.

Google zaleca teraz, aby poprosić o token identyfikacyjny i przesłać go z klienta na serwer. Tokeny identyfikacyjne mają wbudowane zabezpieczenia przed fałszowaniem w wielu witrynach. Można je też weryfikować statycznie na serwerze, co pozwala uniknąć dodatkowego wywołania interfejsu API w celu uzyskania informacji o profilu użytkownika z serwerów Google. Postępuj zgodnie z tymi instrukcjami, aby weryfikować tokeny identyfikacyjne na serwerze.

Jeśli nadal wolisz używać kodu do uzyskiwania informacji o profilu, możesz to zrobić. Gdy Twój serwer otrzyma token dostępu, musisz uzyskać informacje o profilu użytkownika z punktów końcowych userinfo określonych w naszym dokumencie Discovery. Odpowiedź interfejsu API jest sformatowana inaczej niż odpowiedź z profilu Google+, dlatego musisz zaktualizować parsowanie na potrzeby nowego formatu.

Przenoszenie przycisku logowania w formacie HTML

Jeśli na stronie znajduje się przycisk Logowanie przez Google+, który został dodany przez przypisanie do elementu klasy g-signin, wprowadź te zmiany:

  • Gdy podajesz identyfikator klienta w tagu <meta>, atrybucie data- lub obiekcie parametrów, zmień ciąg znaków 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 klasy g-signin. Zamiast jednego wywołania zwrotnego określ osobne wywołania zwrotne na powodzenie i błąd, 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 elementu obsługi wywołania zwrotnego zdefiniuj elementy obsługi powodzenia i błędu, 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ą domyślne zakresy na profile email openid. Aby uzyskać podstawowe informacje o profilu użytkownika, takie jak nazwa, adres e-mail i adres URL zdjęcia, wykonaj te czynności:

    // 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 na swojej stronie masz przycisk Logowanie przez Google+, który został wywołany przez funkcję gapi.signin.render(), wprowadź te zmiany:

  • Gdy podajesz identyfikator klienta w tagu <meta>, atrybucie data- lub obiekcie parametrów, zmień ciąg znaków 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">
    
  • Wyświetlaj przycisk logowania z użyciem wartości gapi.signin2.render() zamiast 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 elementu obsługi wywołania zwrotnego zdefiniuj elementy obsługi powodzenia i błędu, 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ą domyślne zakresy na profile email openid. Za pomocą metody getBasicProfile() możesz pobrać podstawowe informacje z profilu użytkownika.

Przenoszenie procesu logowania inicjowanego przez JavaScript

Jeśli po kliknięciu przez użytkowników przycisku logowania rozpoczyna się proces logowania wywołaniem funkcji gapi.auth.signIn(), wprowadź te zmiany:

  • Gdy podajesz identyfikator klienta w tagu <meta>, atrybucie data- lub obiekcie parametrów, zmień ciąg znaków 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">
    
  • Aby rozpocząć proces logowania po naciśnięciu przycisku, użyj elementu gapi.auth2.attachClickHandler(), 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 elementu obsługi wywołania zwrotnego zdefiniuj elementy obsługi powodzenia i błędu, 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ą domyślne zakresy na profile email openid. Możesz pobrać podstawowe informacje z profilu użytkownika, wywołując metodę getBasicProfile().

Migracja hybrydowego procesu po stronie serwera

Jeśli do uzyskania jednorazowego kodu autoryzacji, który należy przekazać serwerowi, użyjesz interfejsu JavaScript API, 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 parametr zakresu email.