Как получить токен google oauth в функции лямбды, настроив раздел связывания учетных записей в консоли разработчика alexa? - PullRequest
0 голосов
/ 30 января 2019

Я ссылался на эту ссылку https://medium.com/coinmonks/link-your-amazon-alexa-skill-with-a-google-api-within-5-minutes-7e488dc43168 и использовал ту же конфигурацию, как указано.

Я могу получить токен доступа в лямбда-функции var accesstoken = handlerInput.requestEnvelope.context.System.user.accessToken;

Как получить токен обновления в событии handlerinput, настроив раздел связывания учетной записи консоли разработчика alexa?

Я пытался включить / отключить навык в приложении-компаньоне, Протестировано с помощью симулятора, УдалениеАлекс умение из автоматического доступа Google, а затем разрешить доступ.

LaunchRequestHandler = {
  canHandle(handlerInput) {

    return handlerInput.requestEnvelope.request.type === 'LaunchRequest' || (handlerInput.requestEnvelope.request.type === 'IntentRequest' && handlerInput.requestEnvelope.request.intent.name === 'LaunchRequest');
  },
  async handle(handlerInput) {


    console.log('LAUNCH REQUEST CALLED');
    const speechText = 'Welcome!';
    if (handlerInput.requestEnvelope.context.System.user.accessToken === undefined) {
      console.log('ACCESS TOKEN NOT FOUND IN LAUNCH REQUEST');
      return handlerInput.responseBuilder
        .speak("ACCESS TOKEN NOT FOUND IN LAUNCH REQUEST")
        .reprompt("ACCESS TOKEN NOT FOUND IN LAUNCH REQUEST")
        .withLinkAccountCard()
        .withShouldEndSession(true)
        .getResponse();
    } 



     const fs = require('fs');
    const readline = require('readline');
    const { google } = require('googleapis');


    const SCOPES = ['https://www.googleapis.com/auth/userinfo.email','https://www.googleapis.com/auth/userinfo.profile','https://www.googleapis.com/auth/plus.me','https://www.googleapis.com/auth/tasks.readonly','https://www.googleapis.com/auth/tasks'];

function authorize() {

      return new Promise((resolve) => {
        const client_secret = process.env.client_secret;
        const client_id = process.env.client_id;
        const redirect_uris = ['*******************************', '*******************************', '*******************************'];
        const oAuth2Client = new google.auth.OAuth2(
          client_id, client_secret, redirect_uris[0]);

        console.log('access token found : ' + handlerInput.requestEnvelope.context.System.user.accessToken);

        oAuth2Client.credentials = { "access_token": handlerInput.requestEnvelope.context.System.user.accessToken };

1 Ответ

0 голосов
/ 30 января 2019

Alexa токен обновления не выставляется Skill, другими словами: у вашего кода навыка нет возможности получить доступ к токену обновления, это полностью управляется Alexa.Alexa будет использовать токен обновления за кулисами, чтобы запросить у вашего провайдера идентификации (в вашем случае Google) новый токен, когда ваш клиент получит доступ к вашим навыкам, и токен доступа скоро истечет.

Это объясняется в документации по привязке аккаунта Alexa на https://developer.amazon.com/docs/account-linking/account-linking-for-custom-skills.html#choose-auth-type-overview

...