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 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}));
    });