【发布时间】:2017-11-20 14:03:13
【问题描述】:
非常简单的用例解释了我的问题:假设我的应用要求输入密码以进行某些交互。现在用户给了我三遍错误的密码。然后,我想重置他的访问权限并强制他重新链接他的帐户。我可以在我的内部数据库中很容易地做到这一点,但我需要一种方法来告诉谷歌他当前使用的令牌不再有效。否则,Google 助理拒绝向我发送现在被拒绝的令牌。
2018-03-01 更新:使用新的内置意图/事件,我还尝试通过 followupEvent 属性发送 actions_intent_SIGN_IN 事件,但这只会导致谷歌助手使用 GOOGLE_ASSISTANT_WELCOME(使用旧的 oauth 令牌..)调用我的 api,而不是重新启动登录工作流。
原帖
我有一个带有对话框流的谷歌助手应用程序,它强制用户登录才能使用我的应用程序。最初的 oauth 工作流程有效,我确实在所有 api 调用中都获得了令牌。
现在我想强制用户在某些情况下重新运行帐户关联工作流程。为此,我从内部数据库中删除了 oauth 令牌,并将此响应准确发送给用户,如果您使用的是 sdk,这应该等于 app.askForSignIn() 调用:https://github.com/actions-on-google/actions-on-google-nodejs/blob/fe29016d472eeb1d080e2b575236076e9341199e/test/dialogflow-app-test.js#L1827
但这不起作用。助手不会告诉用户重新运行 oauth 链接工作流,也不会删除它存储的 oauth 令牌。它甚至不使用它的刷新令牌来获取新的访问令牌!
此外,模拟器没有使用我的响应的“语音”属性,而是用“抱歉,我没有得到任何响应”来回答。 - 虽然我的模拟器配置为说德语。
(我还尝试省略几个可能不需要的参数,例如contextOut 属性。这会导致与the one stated in the official sdk sources 不同的请求,但也没有给出预期的结果。)
【问题讨论】:
-
您是否发送了表明您的令牌错误的响应?
-
@NickFelker 那我必须发送什么样的回复?我在文档 (developers.google.com/actions/identity/account-linking) 中没有找到任何关于此的内容。唯一说明的是发送
actions.intent.SIGN_IN以启动帐户链接工作流程,这就是我尝试过的。 -
您是否发送带有文本“无效代码”或“过期代码”的 400? IE。 github.com/actions-on-google/actionssdk-smart-home-nodejs/blob/…
-
@NickFelker 您正在描述我的 oauth 端点的响应,不是吗?问题是我的 oauth 端点 根本没有重新触发。但是在您回复之后,我还尝试从我的 dialogflow webhook 发送带有“无效代码”的 400 响应——这只导致我的谷歌操作模拟器中出现“验证错误”。所以问题仍然是:我如何告诉谷歌助手获取新的 oauth 令牌/重新启动帐户链接?
-
这是一个有趣的用例。不幸的是,我不确定答案。
标签: actions-on-google google-home dialogflow-es api-ai