Etapas para minimizar o impacto das mudanças de escopo nos usuários
- Se o app exigir o endereço de e-mail de um usuário autenticado e você já tiver usado
profile.emails.read
para essa finalidade, useemail
. - Aprovar
profile.emails.read
com uma solicitação de verificação aprovada. Consulte Como enviar um app para verificação? - Revogue o token de usuário anterior ao escopo que será removido ou remova o acesso ao aplicativo por completo. Por exemplo, um token com acesso
profile.emails.read
precisa ser revogado. Recomendamos que você aplique a revogação enquanto os usuários estão no seu app para que você possa receber o consentimento do usuário imediatamente. - Peça aos usuários para conceder novamente o consentimento com o novo escopo, como
email
, semprofile.emails.read
. - Remova o escopo que será desativado da configuração da tela de consentimento do OAuth das APIs do Google.
As alterações que você precisa fazer para migrar seu site do Login do Google+ para o Login do Google dependem do fluxo de Login do Google+ que você usa. Em geral, a migração exige que você atualize o botão de login, os escopos solicitados e as instruções de como recuperar informações do perfil do Google.
Ao atualizar o botão de login, não se refira ao G+ nem use a cor vermelha. Obedecer às diretrizes de branding atualizadas.
A maioria dos aplicativos de login do Google+ pedia uma combinação dos escopos:
plus.login
, plus.me
e plus.profile.emails.read
. É necessário 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, junto com a 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 do perfil do usuário da API people.get
.
Agora, o Google recomenda que você solicite um token de ID e o envie do cliente para o servidor. Os tokens de ID têm proteções contra pirataria entre sites integradas e também podem ser verificados estaticamente no servidor, o que evita uma chamada de API extra para receber informações de perfil de 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 do perfil,
faça isso. Quando o servidor tiver um token de acesso, você precisará
receber informações do perfil do usuário
dos endpoints userinfo
especificados no nosso documento de Discovery
de login. A resposta da API
é formatada de maneira diferente da resposta do perfil do Google+. Portanto, você
precisa atualizar a análise para o novo formato.
Migrar um botão de login HTML
Se você incluiu um botão "Fazer login com o Google+" na sua página pela atribuição da classe
g-signin
a um elemento, faça as seguintes mudanças:
Ao especificar seu ID do cliente, seja em uma tag
<meta>
, um atributodata-
ou um objeto de parâmetros, altere a stringclientid
paraclient_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 deg-signin
. Além disso, especifique callbacks de sucesso e falha separados em vez de um único callback, como no exemplo abaixo:<!-- 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 de falha, como no exemplo abaixo:
// 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 seus escopos padrão para
profile email openid
. É possível acessar as informações básicas do perfil do usuário, como nome, e-mail e URL 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 mudanças:
Ao especificar o ID do cliente em uma tag
<meta>
, um atributodata-
ou um objeto de parâmetros, mude a stringclientid
paraclient_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 degapi.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 seus escopos padrão para profile email openid
. É possível
extrair 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ê iniciou o fluxo de login com uma chamada para gapi.auth.signIn()
quando os usuários
clicam no botão de login, faça as seguintes mudanças:
Ao especificar seu ID do cliente, seja em uma tag
<meta>
, um atributodata-
ou um objeto de parâmetros, altere a stringclientid
paraclient_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 abaixo:// 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 seus escopos padrão para profile email openid
. É possível
extrair 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 seu servidor, faça as seguintes mudanças:
Mude o escopo de
https://www.googleapis.com/auth/plus.login
paraprofile
.Use o método
gapi.auth2.grantOfflineAccess()
com sua função de callback atual, 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 de escopo.