Вы не определили локальную стратегию Passport для passport-local-mongoose, поэтому вы так и получаете. Но в вашем коде не с чем сравнивать ваш пароль.Таким образом, без какой-либо локальной стратегии аутентификация будет всегда успешной.
Если вы используете Passport-local-mongoose, он создаст соль и сам хеш, используя заданный пароль.Следовательно, вам не нужно хранить свой пароль в мангусте.User.register()
- это стандартная функция passport-local-mongoose для этого.Таким образом, ваша пользовательская схема должна выглядеть следующим образом:
var UserSchema = new mongoose.Schema({
email: {
type: String,
unique: true
},
name:String,
address: String});
Смотрите здесь, я не упомянул пароль в пользовательской схеме.
Тогда вы должны определить свою локальную стратегию для паспорта.Для Passport-local-mongoose это должно быть похоже на
passport.use(new LocalStrategy(User.authenticate()));
, где user - ваша экспортированная userhema.
Если вы не используете passport-local-mongoose, то код локальной стратегии будет другимне такой, как приведенный выше.
Тогда вам следует выполнить сериализацию и десериализацию вашего паспорта.Это так для passport-local-mongoose
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
Я думаю, вы уже знаете, как инициализировать паспорт следующим образом
app.use(passport.initialize());
app.use(passport.session())
, теперь пришло время для аутентификации.Код:
`passport.authenticate('local',function (err, user, info) { if(err){
res.redirect("/register");
} else{
if (! user) {
res.redirect("/register");
} else{
req.login(user, function(err){
if(err){
res.redirect("/register");
}else{
res.redirect("/campground");`
}
})
}
}
})(req, res);`
Если вы хотите отобразить сообщение об ошибке от passport-local-mongoose, вы можете утешить информацию из passport.authenticate.
Если вы хотите узнать больше подробностей, пройдитеhttps://github.com/saintedlama/passport-local-mongoose