通过使用 ExpressJS 会话,您可以持有会话 cookie。您需要 cookieParser 和会话存储。但是,如果您不想扩展此 ExpressJS 功能(这是我从您的消息中了解到的),您应该使用令牌或秘密临时字符串管理您自己的会话。
尽管我强烈建议您使用 ExpressJS 会话,但在没有 ExpressJS cookie 的情况下您应该这样做。
- 每次登录时,创建一个唯一令牌并将其存储以供将来查找。
- 在每个请求上,从客户端发送该令牌并在服务器上检查它。如果令牌无效,则重定向到登录
这是登录代码示例:
app.post("/login", function(req, res) {
if(req.body.username && req.body.password) {
// check username and password
if(authenticated) {
// create a token and store it with the current date (if you want it to expire)
var token = generateAndStoreRandomString(req.body.username);
res.redirect("http://your.domain/path?token=" + token);
return;
}
// Do something if username or password wrong
}
// Do something if no username or password
});
现在,对于每个请求:
app.get("somePath", function(req, res) {
if(!req.query.token) {
res.redirect("http://your.domain/login");
return;
}
// Check token in database, if it exists and it hasn't expired
if(!authenticated) {
res.redirect("http://your.domain/login");
return;
}
// The user is authenticated. Do the actions required by "somePath"
});
尝试让一个进程每隔一段时间清理一次过期的令牌,因为它们最终会加起来。如果你想使用 ExpressJS cookieParser 和 session store,有很多文章和例子。如果您遇到问题,请发布另一个问题。
我再重复一遍,尝试使用 ExpressJS 会话。如果你使用http而不是https,这种方法很容易被劫持。