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