如何修复“ User.findOne()”返回用户的空值

时间:2019-04-25 02:45:33

标签: node.js mongodb express mongoose

我目前正在开发一个新项目,并且正在尝试使登录路径正常工作。但是登录始终失败,因为User.findOne()方法始终返回null。

我尝试将导出从用户模型更改为

var User = mongoose.model('User', UserSchema, 'User');

但是它没有任何改变。

我知道与数据库的连接很好,因为寄存器路由可以正常工作并且可以正确保存。

登录路线

router.post('/login', function (req, res) {
    User.findOne({ username: req.body.username, password: req.body.password }, function (err, user) {
        if (err || user == null) {
            res.redirect('/login');
            console.log(user);
        } else {
            req.session.userId = user._id;
            res.redirect('/');
        }
    });
});

用户架构

var mongoose = require('mongoose');
var bcrypt = require('bcrypt');

var UserSchema = new mongoose.Schema({
    email: {
        type: String,
        unique: true,
        required: true,
        trim: true
    },
    username: {
        type: String,
        unique: true,
        required: true,
        trim: true
    },
    password: {
        type: String,
        required: true
    }
});

UserSchema.statics.authenticate = function (email, password, callback) {
    User.findOne({ email: email }).exec(function (err, user) {
        if (err) {
            return callback(err);
        } else if (!user) {
            var err = new Error('User not found.');
            err.status = 401;
            return callback(err);
        }
        bcrypt.compare(password, hash, function (err, result) {
            if (result === true) {
                return callback(null, user);
            } else {
                return callback();
            }
        });
    });
};

//hashing a password before saving it to the database
UserSchema.pre('save', function (next) {
    var user = this;
    bcrypt.hash(user.password, 10, function (err, hash) {
        if (err) {
            return next(err);
        }
        user.password = hash;
        next();
    });
});

var User = mongoose.model('users', UserSchema);
module.exports = User;

数据库连接

var mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/wowDb', { useNewUrlParser: true });
var db = mongoose.connection;
mongoose.set('useCreateIndex', true);

db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function () { });

我用过

db.users.findOne({username: "Imortalshard"}); 

得到输出


{
        "_id" : ObjectId("5cc10cd13361880abc767d78"),
        "email" : "admin@wowdb.com",
        "username" : "Imortalshard",
        "password" : "$2b$10$7Ln5yHFqzPw/Xz6bAW84SOVhw7.c0A1mve7Y00tTdaKzxzTph5IWS",
        "__v" : 0
}

Console output from console.log(req.body) and console.log(user)

我正在等待我注册的用户能够成功登录,但是目前,它只是将我重定向回登录页面,并在控制台中为用户提供空读数。

0 个答案:

没有答案