Как получить id_token из ответа, сгенерированного после регистрации пользователя через gmail api? - PullRequest
0 голосов
/ 27 июня 2018

Я использую Gmail API для регистрации пользователя в моем приложении. Для подтверждения пользователя мне потребуется id_token, сгенерированный после регистрации пользователя. Я регистрирую следующий объект, но не вижу там id_token.

access_token:"xx"
authuser:"xx"
client_id:"xx"
cookie_policy:"xx"
expires_at:"xx"
expires_in:"xx"
issued_at:"xx"
login_hint:"xx"
response_type:"xx"
scope:"xx"
session_state:"xx"
status:"xx",
token_type: "xx"

следующий код

const API_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx';
var clientId = 'xxxxx-xxxx.apps.googleusercontent.com';

const scopes =
'https://www.googleapis.com/auth/plus.login '+'https://www.googleapis.com/auth/gmail.readonly '+
'https://www.googleapis.com/auth/gmail.send';


const script = document.createElement("script");
  script.src = "https://apis.google.com/js/client.js";

  script.async = true
  script.onload = () => {
    window.gapi.load('auth2', () => {
      window.gapi.client.setApiKey(API_KEY);
      window.setTimeout(checkAuth, 1);
    });
  }
 document.body.appendChild(script)

function checkAuth() {
  gapi.auth2.init({
    client_id: clientId,
    scope: scopes,
    immediate: true
  }, handleAuthResult);
}

function handleAuthClick() {
  gapi.auth2.init({
    client_id: clientId,
    scope: scopes,
    immediate: false
  }, handleAuthResult);
  return false;
}

function handleAuthResult(authResult) {
  if(authResult && !authResult.error) {
    loadGmailApi();
    console.log(authResult)
  } else {
    $('#authorize-button').on('click', function(){
      handleAuthClick();
   });
  }
}

function loadGmailApi() {
  gapi.client.load('gmail', 'v1', () => console.log('loaded'));
}

Регистрация authResult дает мне вышеупомянутый выходной объект. Можете ли вы проверить, что мне не хватает и как я могу получить этот id_token. Я использую эту ссылку для отправки электронных писем с помощью Gmail API: https://www.sitepoint.com/mastering-your-inbox-with-gmail-javascript-api/

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Для возврата id_token вам необходимо запустить кикстар и поток OpenID Connect, что делается путем добавления области openid в список областей в вашем запросе авторизации.

0 голосов
/ 27 июня 2018

Вы неправильно входите в свой клиент Js start

<code>   <!DOCTYPE html>
<html>
  <head>
    <title>Gmail API Quickstart</title>
    <meta charset='utf-8' />
  </head>
  <body>
    <p>Gmail API Quickstart</p>

    <!--Add buttons to initiate auth sequence and sign out-->
    <button id="authorize-button" style="display: none;">Authorize</button>
    <button id="signout-button" style="display: none;">Sign Out</button>

    <pre id="content">
// Идентификатор клиента и ключ API из консоли разработчика var CLIENT_ID = ''; // Массив URL-адресов документов для обнаружения API для API, используемых при быстром запуске var DISCOVERY_DOCS = ["https://www.googleapis.com/discovery/v1/apis/gmail/v1/rest"]; // Области авторизации, требуемые API; несколько областей могут быть // включено, разделено пробелами. var SCOPES = 'https://www.googleapis.com/auth/gmail.readonly'; var authorizeButton = document.getElementById ('кнопка авторизации'); var signoutButton = document.getElementById ('кнопка для выхода'); / ** * При загрузке вызывается для загрузки библиотеки auth2 и клиентской библиотеки API. * / function handleClientLoad () { gapi.load ('client: auth2', initClient); } / ** * Инициализирует клиентскую библиотеку API и устанавливает состояние входа * слушатели. * / function initClient () { gapi.client.init ({ discoveryDocs: DISCOVERY_DOCS, clientId: CLIENT_ID, область применения: ОБЛАСТИ ПРИМЕНЕНИЯ }). then (function () { // Прослушивание изменений состояния входа. . Gapi.auth2.getAuthInstance () isSignedIn.listen (updateSigninStatus); // Обработка начального состояния входа. updateSigninStatus (gapi.auth2.getAuthInstance () isSignedIn.get ().); authorizeButton.onclick = handleAuthClick; signoutButton.onclick = handleSignoutClick; }); } / ** * Вызывается при изменении статуса входа в систему для обновления пользовательского интерфейса. * соответственно. После входа вызывается API. * / function updateSigninStatus (isSignedIn) { if (isSignedIn) { authorizeButton.style.display = 'none'; signoutButton.style.display = 'block'; listLabels (); } еще { authorizeButton.style.display = 'block'; signoutButton.style.display = 'none'; } } / ** * Войдите в систему после нажатия кнопки. * / function handleAuthClick (event) { . Gapi.auth2.getAuthInstance () зарегистрировались (); } / ** * Выход пользователя после нажатия кнопки. * / function handleSignoutClick (event) { . Gapi.auth2.getAuthInstance () SignOut (); } / ** * Добавить элемент pre к телу, содержащему данное сообщение * как его текстовый узел. Используется для отображения результатов вызова API. * * @param {string} message Текст для размещения в предварительном элементе. * / function appendPre (message) { var pre = document.getElementById ('content'); var textContent = document.createTextNode (message + '\ n'); pre.appendChild (TextContent); } / ** * Распечатайте все ярлыки в почтовом ящике авторизованного пользователя. Если нет ярлыков * найдено соответствующее сообщение. * / function listLabels () { gapi.client.gmail.users.labels.list ({ 'userId': 'me' }). then (function (response) { var tags = response.result.labels; appendPre ( 'Ярлыки:'); if (tags && tags.length> 0) { для (я = 0; я <метки.длина; я ++) { переменная метка = метки [я]; appendPre (label.name) } } еще { appendPre ('Метки не найдены.'); } }); } </script>
...