2

正如文档中明确解释的那样,登录意图目前不起作用,它只是您可以在模拟器中用于测试的东西,但它在生产中不可用。

我的情况是我正在使用帐户链接,并且我的令牌在一天后过期,因此如果用户不与助手交互,令牌将不再有效。然后,如果令牌在 webhook 上被证明是无效的,我想从 webhook 将“请再次链接您的帐户”发回给助手。

有一种方法app.askForSignIn();似乎与我需要的方法相似,但它似乎不适用于 Dialogflow,仅适用于 SDK。

所以我所做的是:

  • 使用名称在 Dialogflow 中创建意图并向其actions.intent.SIGN_IN添加actions_intent_SIGN_IN事件
  • 当任何请求到达 webhook 时,我会检查令牌,如果遇到无效令牌,我会调用app.askForSignIn();

怎么了:

  • 该应用程序刚刚离开了对话,例如:测试应用程序离开了对话
  • 当我再次说“与测试应用程序交谈”时,它的行为就像帐户已链接并且不要求帐户链接,直到我使用测试控制台中的重置按钮手动重置整个应用程序

更新:

我尝试使用文档中的代码片段(https://developers.google.com/actions/reference/nodejs/AssistantApp#askForSignIn),但效果不佳,这是我打电话时模拟器的app.askForSignIn();响应网络钩子

在此处输入图像描述

4

1 回答 1

0

您可以拥有 2 个令牌,一个是短期访问令牌,另一个是长期刷新令牌。

因此,当 Google 需要调用您服务的某个 API 时,Google 会一起使用这些端点来获得您的用户代表他们调用这些 API 的许可。由 Google 发起的典型 OAuth 2.0 会话具有以下流程:

首先,Google 在用户浏览器中打开您的授权端点。如果用户尚未登录,请登录,如果尚未授予权限,则授予 Google 使用您的 API 访问其数据的权限。

然后,您的服务会创建一个授权代码并将其返回给 Google,方法是将用户的浏览器重定向回 Google,并将授权代码附加到请求中。

接下来,Google 将授权代码发送到您的令牌交换端点,该端点会验证代码的真实性并返回访问令牌和刷新令牌。访问令牌是一个短期令牌,您的服务接受它作为访问 API 的凭据。刷新令牌是一个长期存在的令牌,Google 可以存储并使用它在过期时获取新的访问令牌。

最后,Google 调用您服务的 API,将访问令牌附加到每个请求中。您的服务会验证访问令牌是否授予 Google 访问 API 的授权,然后完成 API 调用。

于 2018-08-19T11:03:09.257 回答