Ao solicitar a permissão do usuário para acessar dados do usuário ou outros recursos, é possível solicitar todos os escopos de antemão na solicitação inicial ou solicitar escopos apenas conforme necessário, usando a autorização incremental. Com a autorização incremental, seu aplicativo inicialmente solicita apenas os escopos necessário para iniciar seu aplicativo e, em seguida, solicita escopos adicionais como novas permissões são obrigatórios, em um contexto que identifique o motivo da solicitação ao usuário.
Por exemplo, suponha que seu app permita que os usuários salvem playlists de música para o Google Drive. o app pode solicitar informações básicas do usuário no login, e, mais tarde, quando o usuário estiver pronto para salvar a primeira playlist, solicitam apenas permissões do Google Drive.
Use essa técnica se você suspeitar que os usuários não estão fazendo login porque a tela de consentimento está sobrecarregando ou se eles estão confusos sobre por que estão sendo solicitados para conceder determinadas permissões. As instruções a seguir são para a Web e são derivadas do instruções para adicionar um botão de login do lado do cliente: Como criar um botão de Login do Google 2.0. Leia mais sobre a autorização incremental para a Web na Documentação do OAuth 2.0.
Como solicitar escopos adicionais
No login, o app solicita "base" de acesso, que consistem no escopo do login
profile
e todos os outros escopos iniciais que o app exigir para operação.
Mais tarde, quando o usuário quiser realizar uma ação que requer
escopos, seu aplicativo solicita esses escopos adicionais e o usuário autoriza apenas
os novos escopos em uma tela de consentimento.
Etapa 1: solicitar escopos básicos
Solicite o escopo básico profile
ao inicializar o login do Google. Isso
etapa está incluída no
Como criar um botão de Login do Google 2.0.
auth2 = gapi.auth2.init({
client_id: 'CLIENT_ID.apps.googleusercontent.com',
cookiepolicy: 'single_host_origin', /** Default value **/
scope: 'profile' }); /** Base scope **/
Etapa 2: solicitar escopos adicionais
Sempre que outros escopos forem necessários, solicite-os criando um builder de opções
com os escopos que você quer adicionar e chamando user.grant({scope:
[OPTIONS BUILDER]}).then(successFunction, failFunction);
:
const options = new gapi.auth2.SigninOptionsBuilder();
options.setScope('email https://www.googleapis.com/auth/drive');
googleUser = auth2.currentUser.get();
googleUser.grant(options).then(
function(success){
console.log(JSON.stringify({message: "success", value: success}));
},
function(fail){
alert(JSON.stringify({message: "fail", value: fail}));
});