【发布时间】:2019-09-09 00:53:26
【问题描述】:
我想创建一个登录系统,使用 Node JS 和 ExpressJS。用户键入他们的凭据,然后服务器检查这些凭据以查看它们是否有效。如果它们有效,服务器将重定向用户主页并发送数据,包括用户的凭据(以供进一步使用)。这是 RESTful。
const app = require("express")();
const bodyParser = require('body-parser');
app.get("/login", function(req, res)
{
res.sendFile(__dirname + "/front-end/login.html");
});
app.post("/login",function(req, res)
{
var username = req.body.username;
var password = req.body.password;
//returns whether the credentials work
var credentialsPassed = checkCredentials(username,password);
if(credentialsPassed)
{
//redirect to home-page and pass along the user's credentials for further use
}
});
我已经读过How do I redirect in expressjs while passing some context?。答案在 url 中发送数据。但是,我需要发送用户的凭据,因此在 URL 中传递它是不安全的。另一种选择是使用 EJS(或类似的东西),但我必须为这 1 个任务下载一个相当大的模块。
有没有更好的办法?
【问题讨论】:
-
如果您没有在 URL 中传递数据,那么您的选择是将数据放入 cookie 或用户会话(由 cookie 键入)中。在任何一种情况下,您都可以在该用户的下一个请求(来自重定向的请求)到达时访问数据。将数据放在用户会话中通常更安全,因为会话保存在服务器上。
-
您在其他 cmets 中谈到不在服务器上存储任何内容,并且不知何故认为这是您必须做的纯 REST。你根本不能两者兼得。您可以将请求所需的所有内容都放在 URL 中,或者在 URL 中放置一些可以附加到某些服务器端数据的令牌,或者使用 cookie。这些是做到这一点的方法。没有什么不是 REST 只是因为您登录然后在 cookie 或指向服务器上的用户会话的 URL 中有一个令牌。