Google/DialogFlow上的操作:在没有conv对象的情况下从idToken获取用户数据



我部署了一个启用了Google登录帐户链接的Action。此操作使用云函数作为fullfilment。我们使用以下方法从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?

idToken只是一个普通的JWT(JSON Web令牌(,它由谷歌的一个密钥(频繁轮换(签名。尽管应该验证签名,但不需要来验证。

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

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

但是,您实际上应该验证签名,因此您需要以有用的格式获取密钥。多声道库中执行此操作的部分使用来自谷歌的JWK版本的密钥,并将其转换为PEM格式进行验证。

您可以使用"googleauthlibrary"来验证令牌并获取有效负载。这是文档的链接

相关内容

  • 没有找到相关文章

最新更新