即使我“知道”他们存在,mongo也没有显示用户

时间:2015-01-22 05:41:24

标签: node.js mongodb express

我正在尝试使用MEAN为我的网站实现身份验证系统,但是我遇到了一个相对奇怪的问题。我能够注册用户,并且可以识别重复的用户名。但是,我无法登录网站工作。当我使用命令行搜索mongo数据库时,我什么都没得到。这就是我的mongo输出的样子。

>> show users 
>>

数据库在某个地方有用户名...所以如何让用户正确显示?当我尝试登录时,为什么该用户未定义,即使我知道用户名在数据库中?

var crypto = require('crypto');
var mongoose = require('mongoose');
var User = mongoose.model('User');

function hashPW(pwd) {
    return crypto.createHash('sha256').update(pwd).digest('base64').toString();
};

module.exports.signup = function (req,res) {
    var user = new User({username:req.body.usernmae});
    console.log('made it here');

    user.set('hashed_password', hashPW(req.body.password));
    user.set('email', req.body.email);

    user.save(function (err) {
        if (err) {
            try {
                if (err.code==11000) res.render('signup', {message: 'Sorry, someone has that username already.'})
            } catch(e) {

            }
            console.log(err);
            //res.redirect('/signup');
        } else {
            req.session.user = user.id;
            req.session.username = user.username;
            req.session.msg = 'Authenticated as ' + user.username;
            res.redirect('/');
        }
    });
};

module.exports.login = function (req,res) {
    User.findOne({ username: req.body.username })
        .exec(function(err,user) {
            console.log(user);
            console.log(err);
            console.log(hashPW(req.body.password.toString()));

            if (!user) {
                err = 'User Not Found.';
            } else if ( user.password === hashPW( req.body.password.toString() ) ) {
                req.session.regenerate(function() {
                    req.session.user = user.id;
                    req.session.username = user.username;
                    req.session.msg = 'Authenticated as ' + user.username;
                    res.redirect('/');
                });
            } else {
                err = 'Authentication failed.';
            }

            if (err) {
                console.log(err);
                req.session.regenerate(function() {
                    req.session.msg = err;
                    res.redirect('/login');
                });
            }
        });
};

2 个答案:

答案 0 :(得分:0)

我注意到提供的代码中存在拼写错误。

var user = new User({username:req.body.usernmae});

应该阅读

var user = new User({username:req.body.username});

这可能意味着名称未能设置,因此将垃圾用户放入您的数据库。

另外,关于你在Mongo Shell中的命令,Neil的答案涵盖了show命令在这里实际上没用。 The reference for db.collection.find() is here.

答案 1 :(得分:0)

愚蠢的错误。该字段不是password,而是hashed_password

{ email: 'somerandomemail@gmail.com',
  hashed_password: 'A8ctR3JAA84DWTmYXEAhxEEP1bTtAidaoyWArKHtk2g=',
  username: 'Szpok',
  _id: 54c09c458c4eccc90b9c4bb5,
  __v: 0 }