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, o app inicialmente solicita apenas os escopos necessários para iniciar o app e, em seguida, solicita escopos adicionais conforme novas permissões são necessárias, em um contexto que identifica o motivo da solicitação ao usuário.
Por exemplo, suponha que seu app permita que os usuários salvem playlists de música no Google Drive. O app pode solicitar informações básicas do usuário ao fazer login e, mais tarde, quando o usuário estiver pronto para salvar a primeira playlist, pedir apenas as 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 das 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 escopos "base", que consistem no escopo de login
profile
e em todos os outros escopos iniciais necessários para a operação do app.
Mais tarde, quando o usuário quiser realizar uma ação que exige escopos
adicionais, o app vai solicitar esses escopos, e o usuário vai autorizar apenas
os novos escopos em uma tela de consentimento.
Etapa 1: solicitar escopos base
Solicite o escopo básico profile
ao inicializar o login do Google. Esta
etapa está incluída em
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}));
});