【发布时间】:2018-06-17 22:58:44
【问题描述】:
我正在尝试在我的代码中实现 Post-Redirect-Get 设计模式,该模式使用 Express。我所拥有的是:
var sessionVariable;
app.post('/user', function(req, res) {
sessionVariable = req.session;
// Sets a session variable to a token
sessionVariable.token = req.body.token;
// Redirect to /user
return res.redirect('/user')
});
app.get('/user', function(req, res) {
sessionVariable = req.session;
if(sessionVariable.token){
res.send('Logged in');
} else {
res.send('Not logged in');
}
});
我期望发生的情况是,当用户向 /user 提交 POST 请求时,它将定义 sessionVarlable.token,然后再次重定向到 /user 并检查令牌是否存在。
最终发生的事情是我将提交 POST 请求,并且通过控制台日志记录我可以看到 app.post 触发,但它不会重定向。相反,它似乎卡在了省略 POST 请求的页面上。
这是什么原因?
编辑:任何res 都不会在 app.post 下触发,例如res.send('test') 不起作用。
【问题讨论】:
-
我认为重定向不会将 HTTP 方法从
POST更改为GET。此外,像这样使用全局变量是一种非常糟糕且不安全的做法。假设两个用户同时尝试登录,您创建了一个竞争条件。 -
@PatrickRoberts FWIW 假设这是
express-session那么这将不是全局的,会话对象是用户范围的。 OP - 您的 POST 调用是否是通过 AJAX 进行的? -
@James
req.session是用户范围,sessionVariable不是。 -
@James 我的 POST 请求是通过
request节点模块运行的。它看起来像 request.post('/user', { json: { token: json.access_token } }); -
@PatrickRoberts 它们是同一个变量:/ 不确定我是否看到与您相同的问题 - 它的全局性是什么?
标签: javascript node.js