使用NodeJS中的Global.var临时存储重定向URL,以便在OAuth回调后使用

时间:2016-08-14 21:36:03

标签: node.js oauth global

我有一个nodejs应用程序(http://app.winetracker.co),我正在集成OAuth登录。我想我可以使用global.redirectURL var临时存储重定向URL,以便在OAuth回调后使用。

// url param passed to route /auth/twitter?redirectUrl=/path/to/location

app.get('/auth/twitter', function(req, res) {
    var redirectUrl = req.param('redirectUrl');
    global.redirectUrl = req.param('redirectUrl');
    passport.authenticate('twitter', {})(req, res);
});
app.route('/auth/twitter/callback').get(users.oauthCallback('twitter'));

如果我有2个用户同时通过OAuth登录我的应用,那么global.redirectURL值是否会被每个用户的重定向var值覆盖?

基本上,每个用户都是唯一的全局值,还是每个人共享相同的global.redirectUrl var值?

1 个答案:

答案 0 :(得分:1)

  

如果我有2个用户同时通过OAuth登录我的应用,那么   每个用户的重定向都会覆盖global.redirectURL值   var值?

是的,它们会被覆盖,这样做是一个严重的问题。

  

基本上,每个用户都是唯一的全球价值观   共享相同的global.redirectUrl var值?

全局值与整个服务器共享,因此可能正在处理的所有用户的所有请求都可以看到存储的内容。您几乎不应该将这种临时信息存储在全局中。如果auth代码是异步的(我假设它是),那么您可以轻松地让多个请求与该全局冲突/冲突。这是一个需要做的错误。你必须改变另一种解决问题的方法。

此类问题的常见解决方案没有全局漏洞,包括以下内容:

  1. 使用会话管理器并将数据放入此特定浏览器的会话中,以便在重定向期间从那里检索它。

  2. 将信息作为查询参数放在重定向网址上,这样当浏览器返回重定向网址时,您就可以从查询字符串中解析出来了。

  3. 为此请求输入唯一ID,将其设置为Cookie并使用ID作为键将临时数据存储在地图中。然后,当重定向返回时,您可以使用cookie获取ID,然后在地图中查找值。这本质上是一个会话,但它的特殊目的仅仅是为了这个目的。为了彻底,您还必须确保您的地图随着时间的推移而泄漏并积累,因此您必须存储时间戳并通过删除旧值来定期清理地图。