Como solicitar permissões adicionais

Ao solicitar a permissão do usuário para acessar dados do usuário ou outros recursos, é possível solicitar todos os escopos antecipadamente na solicitação inicial ou somente conforme necessário, usando a autorização incremental. Com a autorização incremental, o app solicita inicialmente apenas os escopos necessários para iniciá-lo e depois solicita outros escopos à medida que 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. Ele poderá solicitar informações básicas do usuário no login e, posteriormente, quando o usuário estiver pronto para salvar a primeira playlist, peça 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 é muito pesada ou estiver confuso sobre por que são solicitadas permissões específicas. 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. Saiba 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 "básicos", que consistem no escopo de login profile e em outros escopos iniciais que o app exige para operação. Depois, quando o usuário quiser realizar uma ação que requer outros escopos, o app solicitará esses escopos, e o usuário 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 forem necessários escopos adicionais, solicite-os construindo um criador de opções com os escopos que você quer adicionar e chamando user.grant({scope: [OPTIONS BUILDER]}).then(successFunction, failFunction);:

const option = new gapi.auth2.SigninOptionsBuilder();
option.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}));
    });