我有一个已部署的操作,该操作启用了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..."
}
在我们的情况下,我们只想获取conv
或app.intent('Default Welcome Intent', async (conv) => {
const {payload} = conv.user.profile;
const name = payload ? ` ${payload.given_name}` : '';
}
并检索用户信息。可能是这样的:
userId
答案 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格式进行验证。