Как исправить "User.findOne ()", возвращая null для пользователя - PullRequest
0 голосов
/ 25 апреля 2019

В настоящее время я работаю над новым проектом и пытаюсь заставить работать маршрут входа в систему. Но вход в систему всегда терпит неудачу, потому что метод User.findOne () всегда возвращается как ноль.

Я пытался изменить экспорт с пользовательской модели на

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.log (req.body) и console.log (пользователь)

Я жду, что пользователь, которого я зарегистрировал, сможет успешно войти в систему, но в настоящее время он просто перенаправляет меня обратно на страницу входа и дает нулевое чтение для пользователя в консоли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...