使用node.js和mongodb进行身份验证

时间:2012-09-03 10:56:34

标签: node.js mongodb authentication

伙计们我正在尝试对自己进行身份验证,为此我使用的是node.js和mongo DB.But事情是,在注册后,用户无法对自己进行身份验证。这是我的代码段

app.post('/login',function(req,res){
    ContactProvider.findAll(function(error, posts) {
        var aut = req.body;
        if (aut.user == posts.user && aut.pass == posts.pass) {
            req.session.name = {name:aut.user};
            res.redirect('/home');
        } else {
            res.send('Bad user/pass');
        }
    });
}); 

以下是我注册用户的代码段

app.post('/register',function(req, res) {
    var post=req.body;
    if(post.pass!=post.cpass) {
        res.send("Error:Password doesnt match");
    } else {
        ContactProvider.save({
            user: req.param('user'),
            pass: req.param('pass'),
            cpass: req.param('cpass'),
            email: req.param('email')
        }, function(error, docs) {
            res.redirect('/');
        });
    }
}); 

ContactProvider是下面的一个,其中post post是一个不同的文件,其中发生了所有猫鼬事件

var ContactProvider = require('./PostProvider').ContactProvider;
var ContactProvider= new ContactProvider(); 

这是postprovider文件中的finone查询

ContactProvider.prototype.findone = function(name,pass, callback) {
  Post.findOne({name:name},{pass:pass}, function (err, post) {
                  callback(null, post);

          });
  };

1 个答案:

答案 0 :(得分:0)

您的代码存在严重问题(为什么您使用名称posts作为ContactProvider数组?)。您必须根据用户名和密码搜索ContactProvider。像这样:

app.post('/login',function(req,res){
    var aut = req.body;
    ContactProvider.findOne(
        {
            user: aut.user,
            pass: aut.pass
        },
        function(err, usr) {
            if (error || !usr) {
                res.send('Bad user/pass');
            } else {
                // we have a user, authenticate!
                req.session.name = {name:aut.user};
                res.redirect('/home');
            }
        }
    );
});

SIDE注意:这是一种非常简单的用户身份验证方式,但根本不安全。您应该阅读有关互联网身份验证和安全性的更多信息。确实非常有用的知识。

编辑:您的注册也存在问题。您的数据存储在post变量中,因此也可以在ContactProvider上使用它:

// some other code
ContactProvider.save({
    user: post.user,
    pass: post.pass,
    cpass: post.cpass, // no need to store the same thing twice
    email: post.email