在 NodeJS 中使用 Global.var 临时存储重定向 URL 以在 OAuth 回调后使用
Using Global.var in NodeJS to temporarily store redirect URL to use after OAuth callback
我有一个 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变量值?
If I have 2 users logging into my app via OAuth at the same time, will
the global.redirectURL values get overwritten by each user's redirect
var value?
是的,它们会被覆盖,这样做是一个严重的问题。
Essentially, are global values unique to each user or does everyone
share the same global.redirectUrl var value?
全局值与您的整个服务器共享,因此存储所有可能正在处理的用户的所有请求可见的任何内容。您几乎不应该将这种临时信息存储在全局中。如果授权代码是异步的(我假设是),那么您可以轻松地对该全局请求 trouncing/conflicting 进行多次请求。这是一个充满错误的事情。您必须换一种解决问题的方法。
针对此类问题的不存在全局漏洞的常用解决方案包括:
使用会话管理器并将数据放入此特定浏览器的会话中,以便在重定向期间可以从那里检索数据。
将信息作为查询参数放在重定向 URL 上,这样当浏览器返回重定向 URL 时,您就可以将其从查询字符串中解析出来.
为此请求创建一个唯一的 ID,将其设置为 cookie,并使用 ID 作为键将临时数据存储在地图中。然后,当重定向返回时,您可以使用 cookie 获取 ID,然后在地图中查找值。这本质上是一个会话,但它的特殊目的只是为了这个目的。为了彻底,您还必须确保您的地图不会随着时间的推移而泄漏和堆积,因此您可能必须存储时间戳并通过删除旧值定期清理地图。
我有一个 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变量值?
If I have 2 users logging into my app via OAuth at the same time, will the global.redirectURL values get overwritten by each user's redirect var value?
是的,它们会被覆盖,这样做是一个严重的问题。
Essentially, are global values unique to each user or does everyone share the same global.redirectUrl var value?
全局值与您的整个服务器共享,因此存储所有可能正在处理的用户的所有请求可见的任何内容。您几乎不应该将这种临时信息存储在全局中。如果授权代码是异步的(我假设是),那么您可以轻松地对该全局请求 trouncing/conflicting 进行多次请求。这是一个充满错误的事情。您必须换一种解决问题的方法。
针对此类问题的不存在全局漏洞的常用解决方案包括:
使用会话管理器并将数据放入此特定浏览器的会话中,以便在重定向期间可以从那里检索数据。
将信息作为查询参数放在重定向 URL 上,这样当浏览器返回重定向 URL 时,您就可以将其从查询字符串中解析出来.
为此请求创建一个唯一的 ID,将其设置为 cookie,并使用 ID 作为键将临时数据存储在地图中。然后,当重定向返回时,您可以使用 cookie 获取 ID,然后在地图中查找值。这本质上是一个会话,但它的特殊目的只是为了这个目的。为了彻底,您还必须确保您的地图不会随着时间的推移而泄漏和堆积,因此您可能必须存储时间戳并通过删除旧值定期清理地图。