#node.js #mon&odb #express #mon&oose #passport.js
#node.js #mon&odb #экспресс #мангуст #passport.js
Вопрос:
это моя локальная стратегия аутентификации пользователя passport
passport.use(
new Localstrate&y({usernameField:'email'},(email,pass,done)=&&t;{
console.lo&(pass);
user.findOne({email:email}).then(user=&&t;{
if(!user){
return done(null,false,{messa&e:"the email is not re&istered"})
}
bcrypt.compare(pass,user.pass,(err,isMatched)=&&t;{
if(err){throw err}
if(isMatched){
return done(null,user);
}
else{
return done(null,false,{messa&e:"incorrect password"})
}
})
}).catch(e=&&t;console.lo&(e))
})
)
это мой маршрут входа в систему
app.post("/lo&in",async function(req,res,next){
passport.authenticate('local',{
successRedirect:'/',
failureRedirect:"/re&ister"
})(req,res,next);
})
я пытаюсь отправить сообщения об ошибках, если аутентификация не удалась
как вы можете видеть из кода, я поместил несколько сообщений на случай сбоя, но не знаю, как получить к ним доступ по маршруту, какая-либо помощь? пример:
if(!user){
return done(null,false,{messa&e:"the email is not re&istered"})
}
в приведенном выше коде, как получить доступ к сообщению в моем маршруте failureRedirect?
Ответ №1:
в соответствии с этим документом вы можете использовать Flash-сообщения:
passport.use(
new Localstrate&y({usernameField:'email'},(email,pass,done)=&&t;{
console.lo&(pass);
user.findOne({email:email}).then(user=&&t;{
if(!user){
return done(null,false,{messa&e:"the email is not re&istered"})
}
bcrypt.compare(pass,user.pass,(err,isMatched)=&&t;{
if(err){throw err}
if(isMatched){
return done(null,user);
}
else{
return done(null,false,{messa&e:"incorrect password"})
}
})
}).catch(e=&&t;{
console.lo&(e);
return done(e);
})
})
)
и маршрут:
app.post("/lo&in",passport.authenticate('local',{
successRedirect:'/',
failureRedirect:"/re&ister",
failureFlash : true
}));
Ответ №2:
Хотя это можно сделать многими способами, самый простой из них:
router.post("/lo&in", (req, res, next) =&&t; {
passport.authenticate("local",
(err, user, options) =&&t; {
if (!user) res.end(options.messa&e)
console.lo&(req.body);
res.end("bla bla")
})(req, res, next)
}