Migrar do login do Google+

Etapas para minimizar o impacto das mudanças de escopo nos usuários

  1. Caso seu aplicativo exija o endereço de e-mail de um usuário autenticado e você já tenha usado profile.emails.read para essa finalidade, use email.
  2. Consiga a aprovação do app profile.emails.read com uma solicitação de verificação aprovada. Consulte Como enviar para verificação?
  3. Revogue o token de usuário anterior para o escopo a ser removido ou remova o acesso ao aplicativo completamente. Por exemplo, um token com acesso profile.emails.read precisa ser revogado. Recomendamos que você aplique a revogação enquanto os usuários estiverem no aplicativo para obter o consentimento imediato deles.
  4. Peça para os usuários consentirem novamente com o novo escopo, como email, sem profile.emails.read.
  5. Remova o escopo que será descontinuado da configuração da tela de permissão OAuth das APIs do Google.

As mudanças que você precisa fazer para migrar seu site do Login do Google+ para o Login do Google dependem do fluxo de Login do Google+ usado. Geralmente, a migração exige que você atualize o botão de login, os escopos solicitados e as instruções sobre como recuperar as informações do perfil do Google.

Ao atualizar o botão de login, não se refira ao G+ nem use a cor vermelha. estar em conformidade com nossas diretrizes da promoção de marca atualizadas;

A maioria dos aplicativos de login do G+ solicitava alguma combinação dos escopos: plus.login, plus.me e plus.profile.emails.read. É preciso remapear os escopos da seguinte maneira:

Escopo antigo Novo escopo
plus.login profile
plus.me openid
plus.profile.emails.read email

Muitos implementadores do Login do Google+ usaram o fluxo de código. Isso significa que os apps Android, iOS ou JavaScript recebem um código OAuth do Google, e o cliente envia esse código de volta ao servidor, com proteção contra falsificação de solicitações entre sites. Em seguida, o servidor valida o código e recebe tokens de atualização e acesso para extrair informações de perfil do usuário da API people.get.

Agora o Google recomenda que você solicite um token de ID e o envie do seu cliente para o servidor. Os tokens de ID têm proteções integradas contra falsificação entre sites e também podem ser verificados estaticamente no seu servidor, o que evita uma chamada de API extra para receber informações de perfil do usuário dos servidores do Google. Siga as instruções para validar tokens de ID no seu servidor.

Se você ainda preferir usar o fluxo de código para receber informações de perfil, poderá fazer isso. Depois que o servidor tiver um token de acesso, você precisará acessar informações de perfil de usuário dos endpoints userinfo especificados no documento Descoberta de login. A resposta da API é formatada de maneira diferente da resposta do perfil do Google+. Por isso, você precisa atualizar sua análise para o novo formato.

Migrar um botão de login HTML

Se você incluiu um botão de Login do Google+ na sua página por meio da atribuição da classe g-signin a um elemento, faça as seguintes alterações:

  • Ao especificar seu ID do cliente, seja em uma tag <meta>, um atributo data- ou um objeto de parâmetros, mude a string clientid para client_id, como no exemplo a seguir:

    <!-- 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">
    
  • Atribua a classe g-signin2 ao elemento do botão de login em vez de g-signin. Além disso, especifique callbacks separados de sucesso e falha em vez de um único, como no exemplo a seguir:

    <!-- 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>
    
  • Em vez de um único gerenciador de callback, defina gerenciadores de sucesso e falha, como no exemplo a seguir:

    // 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
    }
    
  • Essas mudanças atualizam os escopos padrão para profile email openid. Você pode receber as informações básicas do perfil do usuário, como nome, e-mail e URL da imagem da foto, da seguinte maneira:

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

Migrar um botão de login renderizado dinamicamente

Se você incluiu um botão de Login do Google+ na sua página chamando gapi.signin.render(), faça as seguintes alterações:

  • Ao especificar seu ID do cliente, seja em uma tag <meta>, um atributo data- ou um objeto de parâmetros, mude a string clientid para client_id, como no exemplo a seguir:

    <!-- 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">
    
  • Renderize o botão de login com gapi.signin2.render() em vez de gapi.signin.render(), como no exemplo a seguir:

    // Google+ Sign-in (old)
    gapi.signin.render('myButton', additionalParams);
    

    // Google Sign-in (new)
    gapi.signin2.render('myButton', additionalParams);
    
  • Em vez de um único gerenciador de callback, defina gerenciadores de sucesso e falha, como no exemplo a seguir:

    // 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
    }
    

Essas mudanças atualizam os escopos padrão para profile email openid. É possível receber as informações básicas do perfil do usuário com o método getBasicProfile().

Migrar um fluxo de login iniciado por JavaScript

Se você tiver iniciado o fluxo de login com uma chamada para gapi.auth.signIn() quando os usuários clicarem no botão de login, faça as seguintes alterações:

  • Ao especificar seu ID do cliente em uma tag <meta>, um atributo data- ou um objeto de parâmetros, mude a string clientid para client_id, como no exemplo a seguir:

    <!-- 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">
    
  • Use gapi.auth2.attachClickHandler() para iniciar o fluxo de login quando um botão for pressionado, como no exemplo a seguir:

    // 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);
    
  • Em vez de um único gerenciador de callback, defina gerenciadores de sucesso e falha, como no exemplo a seguir:

    // 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
    }
    

Essas mudanças atualizam os escopos padrão para profile email openid. É possível conferir as informações básicas do perfil do usuário com uma chamada para o método getBasicProfile().

Migrar um fluxo híbrido do lado do servidor

Se você usou a API JavaScript para adquirir um código de autorização único para transmitir ao servidor, faça as seguintes alterações:

  • Altere o escopo de https://www.googleapis.com/auth/plus.login para profile.

  • Use o método gapi.auth2.grantOfflineAccess() com a função de callback já existente, como no exemplo abaixo:

    <!-- 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);
    

Se você também precisar de acesso ao e-mail do usuário, adicione email ao parâmetro do escopo.