В расширении chrome, как получить токен доступа от пользователя gmail, отличного от текущего пользователя chrome? - PullRequest
0 голосов
/ 17 ноября 2018

Я создал расширение Chrome, которое работает на странице mail.google.com и использует gapi для управления электронными письмами, но не очень хорошо, если пользователь chrome не совпадает с пользователем gmail.

Причина в том, что я получаю access_token от chrome.identity.getAuthToken, который предоставляет мне текущего пользователя chrome, но не пользователя gmail.

Я пытался использовать gapi.auth2 в своем расширении для получения токена доступа пользователей gmail, но безуспешно:

  • при использовании из background.js выдается ошибка «gapi.auth2.ExternallyVisibleError: Invalid cookiePolicy»

  • , когда тот же код, который используется из content.js, выдает ошибку «gapi undefined».

Есть ли способ получить access_token от текущего пользователя Gmail, а не Chrome?

1 Ответ

0 голосов
/ 10 декабря 2018

chrome.identity.launchWebAuthFlow работал для меня.

создать URL-адрес oauth2:

var url = 'https://accounts.google.com/o/oauth2/auth' +
        '?client_id=' + clientId +
        '&response_type=token' + 
        '&redirect_uri=' + redirectUri +
        '&login_hint=' + email +
        '&scope=' + scopes;

Где redirectUri равно https://<your extension id>.chromiumapp.org/oauth2 и должно быть в списке авторизованного URI перенаправления (в консоли разработчика). Я немного постарался, потому что изначально я создал учетные данные «chrome app», и не было опции URI авторизованного перенаправления, поэтому я переключился на учетные данные «web app».

email - текущая электронная почта пользователя. Указание адреса электронной почты помогает пропустить диалог, если пользователь уже дал разрешения.

clientId и области действия необходимо указать вручную, они не будут автоматически извлечены из манифеста.

Затем запустите launchWebAuthFlow:

 chrome.identity.launchWebAuthFlow({
     'url': url,
     'interactive': true
    }, function (redirectedTo) {
       // check errors and get token from redirect url
 });
...