0

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

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 provider 是一个不同的文件,所有的猫鼬事情都发生在这里

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);

          });
  };
4

1 回答 1

0

您的代码有严重问题(为什么您将 nameposts用于数组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');
            }
        }
    );
});

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

编辑:您的注册也有问题。您的数据存储在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
于 2012-09-03T11:49:13.037 回答