强制用户重新链接 his/her 帐户

Force user to relink his/her account

解释我的问题的非常简单的用例:假设我的应用程序要求输入 pin 以进行某些交互。现在用户给了我 3 次错误的 pin。然后,我想重置他的访问权限并强制他重新link他的帐户。我可以在我的内部数据库中很容易地做到这一点,但我需要一种方法来告诉 google 他当前使用的令牌不再有效。否则,Google 助手拒绝向我发送现在被拒绝的令牌。

更新 2018-03-01:使用新的内置 intents/events,我还尝试通过 [=12] 发送 actions_intent_SIGN_IN 事件=] 属性,但这只会导致 google 助手使用 GOOGLE_ASSISTANT_WELCOME(使用旧的 oauth 令牌..)召回我的 api,而不是重新启动登录工作流程。


原版post

我有一个带有对话流的 google 助手应用程序,它强制用户登录才能使用我的应用程序。最初的 oauth 工作流程有效,我确实在所有 api 次调用中都获得了令牌。

现在我想强制用户在某些情况下重新运行 帐户linking 工作流程。为此,我从内部数据库中删除了 oauth 令牌,并将此响应准确地发送给用户,如果您使用的是 sdk,这应该等于 app.askForSignIn() 调用:https://github.com/actions-on-google/actions-on-google-nodejs/blob/fe29016d472eeb1d080e2b575236076e9341199e/test/dialogflow-app-test.js#L1827

但这不起作用。助手不会告诉用户重新运行 oauth linking 工作流,也不会删除它存储的 oauth 令牌。它甚至不使用它的刷新令牌来获取新的访问令牌!

此外,模拟器没有使用我的响应的 "speech" 属性,而是使用 "Sorry, I didn't get any response." 回答 - 尽管我的模拟器配置为说德语。

(我还尝试省略了几个可能不需要的参数,例如 contextOut 属性。这导致与 the one stated in the official sdk sources 不同的请求,但也没有给出所需的结果。)

处理同样的问题,如果您想删除存储的 DF 令牌,建议我发送 401 响应。 DF 没有隐式撤销令牌意图。

遗憾的是,Dialogflow 似乎没有重置状态为 401 错误响应的令牌。

Google 公开一个 API 用于撤销访问和刷新令牌。
为此,您必须发送以下请求
https://accounts.google.com/o/oauth2/revoke?token={token}.

See the different implementations

编辑:看来您只需要让 Dialogflow 重置其状态即可。继续在 Dialogflow 控制台上制作一个版本似乎可以清除访问令牌。