Google / DialogFlow上的操作:从idToken获取用户数据而无需转换对象

时间:2018-11-29 20:16:59

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

我有一个已部署的操作,该操作启用了Google登录帐户关联。该操作将云功能用作完整功能。我们使用以下方法从DialogFlow调用中提取用户:

<p>Default text plugin for the

此函数返回此用户数据:

placeholder...</p>

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

所有文档示例均提供一个function userFromRequest(request) { return request.body.originalDetectIntentRequest.payload.user; } 对象:

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

在我们的情况下,我们只想获取convapp.intent('Default Welcome Intent', async (conv) => { const {payload} = conv.user.profile; const name = payload ? ` ${payload.given_name}` : ''; } 并检索用户信息。可能是这样的:

userId

2 个答案:

答案 0 :(得分:1)

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

的链接

答案 1 :(得分: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格式进行验证。