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
方法,然后确保从前端发送回请求中的令牌