Node.js Expressjs-如何防止用户发布注册表。。。?
如果用户试图Node.js Expressjs-如何防止用户发布注册表。。。?,node.js,session,express,Node.js,Session,Express,如果用户试图POST将数据发送到注册表(如果他们已经登录),以下是重定向用户的适当方法,还是有更好更安全的方法?我阻止他们向注册表发出GET请求,但我还想阻止他们提出POST请求,而不是表单 支票是: if(true !== req.session.loggedIn){ }else{ } 在app.js文件中: app.get('/register',register.registration); app.post('/register',register.doRegistration);
POST
将数据发送到注册表(如果他们已经登录),以下是重定向用户的适当方法,还是有更好更安全的方法?我阻止他们向注册表发出GET
请求,但我还想阻止他们提出POST
请求,而不是表单
支票是:
if(true !== req.session.loggedIn){
}else{
}
在app.js文件中:
app.get('/register',register.registration);
app.post('/register',register.doRegistration);
这是控制器文件:
var mongoose = require('mongoose');
var User = mongoose.model('User');
exports.registration = function(req,res){
//Redirect the user if they are logged in
if(true !== req.session.loggedIn){
res.render('register', {
});
}else{
res.redirect('/user');
}
}
exports.doRegistration = function(req,res){
//Redirect the user if they are logged in
if(true !== req.session.loggedIn){
User.create({
fullName: req.body.register.fullName,
email: req.body.register.email,
password: req.body.register.password,
createdOn: Date.now()
}, function(err, user){
if(err){
console.log(err);
res.redirect('/register');
}else{
console.log('success');
req.session.user = {
"name": user.fullName,
"email": user.email,
"_id": user._id
};
req.session.loggedIn = true;
res.redirect('/user');
}
});
}else{
res.redirect('/user');
}
}
首先,您可以简单地使用一些中间件来检查用户是否登录,并在那里添加任何逻辑,而不是重复每个路由:
function ensureNewUser(req, res, next) {
if (req.session.loggedIn) {
// if user is logged in redirect to /user
res.redirect('/user');
} else {
// else next
next();
}
}
然后在路由定义中使用该中间件:
app.get('/register', ensureNewUser, register.registration);
app.post('/register',ensureNewUser, register.doRegistration);
不完全确定您所说的“更安全的方式”是什么意思,在不知道您如何处理身份验证的情况下很难评论,但通过“防止他们提出POST请求,认为其他方式然后是表单”我假设您所说的是CSRF。在这种情况下,您应该确保您正在使用一些CSRF中间件app.use(express.CSRF())
或者如果使用类似模块的Express4
方法,然后确保从前端发送回请求中的令牌