如何从Google Action中用于智能家居的OAuth中获取访问令牌

时间:2018-10-25 18:07:31

标签: actions-on-google google-home google-smart-home

对于智能家居操作,我使用了伪授权,如codelab-smartwasher应用程序所示。 (出于测试目的)。该应用程序运行正常。我已经建立了自己的代码来与我的设备(交换机)一起使用。现在,当我实现使用自己的自定义OAuth服务器的OAuth时。我无法弄清楚如何在我的代码中实现它。我进行测试时,OAuth会根据需要工作。但我需要帮助将其与google action集成在一起。我在获取访问令牌时遇到问题。 代码如下:

exports.fakeauth = functions.https.onRequest((request, response) => {
      const responseurl = util.format('%s?code=%s&state=%s',
        decodeURIComponent(request.query.redirect_uri), request.query.code,
        request.query.state);
      console.log('*********'+responseurl);
      return response.redirect(responseurl);
    });

    exports.faketoken = functions.https.onRequest((request, response) => {
      const grantType = request.query.grant_type
        ? request.query.grant_type : request.body.grant_type;
      const secondsInDay = 86400; // 60 * 60 * 24
      const HTTP_STATUS_OK = 200;
      console.log(`Grant type ${grantType}`);

      let obj;
      if (grantType === 'authorization_code') {
        obj = {
          token_type: 'bearer',
          access_token: '123access',
          refresh_token: '123refresh',
          expires_in: secondsInDay,
        };
      } else if (grantType === 'refresh_token') {
        obj = {
          token_type: 'bearer',
          access_token: '123access',
          expires_in: secondsInDay,
        };
      }
      response.status(HTTP_STATUS_OK)
        .json(obj);
        console.log('********** TOKEN **********',response);
    });

以上代码使用伪造的auth执行。 实施自定义OAuth时为什么不执行? 我是否需要在firebase中对clienID和secret进行任何更改? 如何获取OAuth返回的访问令牌?

请帮助。我是node.js的新手。

1 个答案:

答案 0 :(得分:0)

将在请求中返回的授权码将在标头中,作为“授权”字段。这是使用Node.js将其拉出的一种方法。

function getToken(headers) {
  // Authorization: "Bearer 123ABC"
  return headers.authorization.substr(7);
}