我正在使用Node.js,并且有一个处理用户“登录”的终结点。查询数据库,并根据查询结果允许用户登录。我希望在成功登录后使用“ res.redirect”,类似于此处(改编自Express文档),以便传递有关数据库调用返回的用户:
app.post('/login', function (req, res) {
//do stuff here to check database and log the user in...
//then set a path to redirect to an endpoint such as "/users/:email/username/:name/joindate/:joined"
res.redirect('/users/' + "me@somehost.com" + '/username/' + "Frank" + '/joindate/' + "11-30-2019")
//sample output would be... req.params: { "email": "me@somehost.com", "username": "Frank", "joindate": "11-30-2019" }
}
我的问题是通过使用这种方法,将生成GET请求...这是不希望的,因为传递的客户信息可能包含敏感信息(例如电子邮件),因此我不希望使用GET,将敏感信息“清除”。而是可以在请求URL中使用POST ...并按如下方式处理它:
app.post('/users/:email/username/:name/joindate/:joined', function (req, res) {
console.log(req.params);
res.render('accounts', {email: req.params[0], username: req.params[1], joined: req.params[2]});
})
可能吗?我在意识到这一点时遇到问题...如何重定向到POST端点?任何帮助,不胜感激。据我了解,使用POST可以安全地传递敏感信息。谢谢您的任何建议。
答案 0 :(得分:0)
好吧,您不能使用res.redirect()
来指示浏览器将数据回传到服务器。那不是浏览器或http功能。
以下是我可以想到的选项:
建议/问题
我的偏好可能是#6,因为在这方面它使服务器保持无状态,并且没有可能的并发问题。
如果您从不希望将数据发送到客户端(也许是最安全的),那么我可能会选择#2或#5,因为它使数据完全保留在服务器端并且没有并发问题。>
如果相同的客户端在不同的浏览器窗口/选项卡中执行两个类似的事务,则选项#3和#4可能存在并发问题,因为您存储的状态仅属于那些窗口之一,但与浏览器绑定,而与浏览器无关一个窗口,以便他们可以彼此覆盖。