В настоящее время я работаю над новым проектом и пытаюсь заставить работать маршрут входа в систему. Но вход в систему всегда терпит неудачу, потому что метод 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 (пользователь)
Я жду, что пользователь, которого я зарегистрировал, сможет успешно войти в систему, но в настоящее время он просто перенаправляет меня обратно на страницу входа и дает нулевое чтение для пользователя в консоли.