我一直在尝试在Google应用上创建操作,并希望进行登录,以便用户可以在Google助手流程之外对我的应用执行操作,然后返回到助手流程,因为这样可以更轻松地配置我的具有正确用户界面的应用程序。
我在隐式模式下使用Google登录和OAuth。
我所有的测试都是使用模拟器完成的,我不确定我的问题是否与该事实有关。
在“身份验证”路径中,我可以通过将自己重定向到以下位置来获取签名令牌:
req.query.redirect_uri + '#access_token=' + my_generated_token + '&token_type=bearer&state=' + req.query.state
通知邪恶的#
(在access_token
之前)而不是?
。
使用?
无效,并要求我添加SDK中未提及的code
或error
字段。此外,添加code=1
或code=200
或code=0
也无济于事。
更改为#
可以解决问题。尽管我的“令牌”路径在被批准之前从未被Google检查过,但这很奇怪。很想知道为什么...
现在的问题是,对话总是与该令牌一起进行,我似乎无法撤销它。
我尝试使用以下方法很早地返回401响应:
app.use((req, res, next) => {
console.log("revoke token");
res.status(401);
res.set('Content-Type', 'application/json;charset=UTF-8');
res.send({"error":"user_not_found"});
});
,我尝试通过“对话框动作” API(在没有响应的情况下)创建一个意图并从模拟器中调用它来使用“ Google行动” API中的全新UnauthorizedError
:
app.intent('sign_out', conv => {
console.log("sign_out");
console.log(conv.user);
throw new UnauthorizedError();
});
在每种情况下,我都会看到服务器在日志中返回401:
POST /<app-name> 401 12.532 ms - 2
然后,助手会回答该应用程序不再响应,并且下次我从模拟器调用我的应用程序时,我总是会收到accessToken
,这意味着它不会被撤消。 accessToken
是我在重定向参数中生成的一个,它从未更改。我的“ auth”和“ token”处理程序(在帐户链接的控制台中定义)也从未被调用,因为该令牌已传递到会话JSON。
我想提一提,我正在使用NGINX反向代理将调用定向到我的服务器(因为我有多种服务:数据库,服务器和客户端)。 NGINX已配置为让我们加密SSL。
我看到多个线程声称UnauthorizedError
在工作。
例如:https://github.com/actions-on-google/actions-on-google-nodejs/issues/289
有人可以帮忙吗?我不知道为什么Google Actions拒绝吊销我的令牌。