Como solicitar permissões adicionais

Ao solicitar 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 apenas conforme necessário, usando autorização incremental. Com a autorização incremental, o app inicialmente solicita apenas os escopos necessários para iniciar o app e depois outros escopos 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úsicas no Google Drive. Seu 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, solicitar apenas permissões do Google Drive.

Use essa técnica se você suspeitar que os usuários não estão fazendo login porque sua tela de consentimento está sobrecarregada ou se estiver confuso sobre por que determinadas permissões são solicitadas. As instruções a seguir são para a Web e derivam das instruções para adicionar um botão de login do lado do cliente em 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 "básicos", que consistem no escopo de login profile e em outros escopos iniciais que o app exige para operação. Posteriormente, quando o usuário quiser realizar uma ação que exija escopos adicionais, o app solicitará esses escopos adicionais, e o usuário autorizará somente 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 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}));
    });