【问题标题】:Actions on Google / DialogFlow: get user data from idToken without conv objectGoogle/DialogFlow 上的操作:从没有转换对象的 idToken 获取用户数据
【发布时间】:2018-11-29 20:16:59
【问题描述】:

我有一个启用了 Google 登录帐户链接的已部署操作。此操作使用云功能作为完成。我们使用这种方法从 DialogFlow 调用中提取用户:

function userFromRequest(request) {
  return request.body.originalDetectIntentRequest.payload.user;
}

此函数返回此用户数据:

   { 
     "idToken": "eyJhbGciOiJSU...",
     "lastSeen": "2018-11-29T16:58:22Z",
     "locale": "en-US",
     "userId": "ABwpp..."
   }

我的问题是:如何从 DialogFlow 应用程序外部获取电子邮件、姓名等用户信息。

所有文档示例都有一个可用的conv 对象:

app.intent('Default Welcome Intent', async (conv) => {
  const {payload} = conv.user.profile;
  const name = payload ? ` ${payload.given_name}` : '';
}

在我们的例子中,我们只想获取userIdidToken 并检索用户信息。可能是这样的:

const dialogflow = require("actions-on-google");    
const app = dialogflow({clientId: '94661...@apps.googleusercontent.com'});

app.getUserData(idToken); //this does not exists, how to have something equivalent?

【问题讨论】:

    标签: firebase-authentication google-cloud-functions dialogflow-es actions-on-google google-assistant-sdk


    【解决方案1】:

    idToken 只是一个普通的JWT (JSON Web Token),已由 Google 的一个密钥(非常频繁地轮换)签名。虽然您应该验证签名,但您并不需要

    您可以使用任何 JWT 库。由于看起来您使用的是 node.js,因此您可以使用类似 jsonwebtoken 的包来解码它,如下所示:

    const jwt = require('jsonwebtoken');
    // get the decoded payload ignoring signature, no secretOrPrivateKey needed
    const decoded = jwt.decode(token);
    

    确实应该验证签名,但是,您需要以有用的格式获取密钥。 multivocal library 执行此操作的部分使用来自 Google 的 JWK 版本的密钥并将其转换为 PEM 格式以进行验证。

    【讨论】:

      【解决方案2】:

      您可以使用“google-auth-library”来验证令牌并获取有效负载。这是the documentation的链接

      【讨论】:

      • 它“几乎”可以工作,因为当我调用 client.verifyIdToken(...) 时,出现错误。 UnhandledPromiseRejectionWarning: E​​rror: Token used too late, 1543580174.785 > 1543175402 - 但记录的错误消息包含所有用户详细信息,如电子邮件、姓名、图片等。所以,从某种意义上说,我有我需要的信息,但在里面返回一条错误消息。
      • 您的令牌似乎已过期,或者您遇到了时区问题。确保您的令牌有效,因为如果您的令牌没有问题,您不应该得到任何异常。我使用的是同一个库,没有出现任何错误。
      猜你喜欢
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多