当验证失败时,我以登录表单显示我可以显示验证错误消息,但我没有获得如何重新填充登录表单的信息。
我希望用户在验证错误时不要再次输入其电子邮件地址。
到目前为止,我已经做了什么,以至于我试图使用connect-flash从password.js发回错误时,试图获取电子邮件的价值。
我的护照当地策略是
passport.use(
"local.signin",
new LocalStrategy(
{
usernameField: "email",
passwordField: "password",
passReqToCallback: true
},
function(req, email, password, done) {
console.log("I am in passport");
req.checkBody("email", "invalid email")
.notEmpty()
.isEmail();
req.checkBody("password",'invalid password')
.notEmpty();
req.flash('email',email);
req.flash('password',password);
var errors = req.validationErrors();
if(errors){
var messages = [];
errors.forEach((error) => {
messages.push(error.msg);
});
console.log("errors: ", errors);
return done(null, false, req.flash("error", messages));
}
User.findOne({email:email}, (err, user) => {
if(err){
return done(err);
}
if(!user){
return done(null, false, {message: "No user found!"});
}
if(!user.validPassword(password)){
return done(null, false, {message: "Wrong Password"});
}
return done(null, user);
});
}
)
);
以及验证失败后路由重定向到的索引函数
exports.index = function(req, res) {
var messages = req.flash("error");
console.log("email: ",req.flash('email'));
res.render("admin/index", {
layout: "loginSignup",
messages: messages,
hasErrors: messages.length > 0,
email: req.flash('email'),
password: req.flash('password')
});
};
当我console.log();它显示为空数组,电子邮件和密码未保存在Flash中,因此我无法在视图中填充输入字段
我没有得到我的代码有什么问题,当我能收到错误消息时,为什么不输入电子邮件和密码值呢?
还是有更好的方法在Node.js中重新填充表单
答案 0 :(得分:1)
将请求主体指定为闪烁,然后像这样发送验证错误重定向
passport.use(
"local.signin",
new LocalStrategy(
{
usernameField: "email",
passwordField: "password",
passReqToCallback: true
},
function(req, email, password, done) {
req.checkBody("email", "invalid email")
.notEmpty()
.isEmail();
req.checkBody("password",'invalid password')
.notEmpty();
var form = req.flash("form",req.body);
var errors = req.validationErrors();
if(errors){
var messages = [];
errors.forEach((error) => {
messages.push(error.msg);
});
console.log("errors: ", errors);
return done(null, false, {
error: req.flash("error", messages),
form: form
});
}
User.findOne({email:email}, (err, user) => {
if(err){
return done(err);
}
if(!user){
return done(null, false, {message: "No user found!", form: form});
}
if(!user.validPassword(password)){
return done(null, false, {message: "Wrong Password", form: form});
}
return done(null, user);
});
}
)
);
和重定向路线上的从表单变量获取req.body,并以以下代码的形式发送到您的视图
exports.index = function(req, res) {
var messages = req.flash("error");
res.render("admin/index", {
layout: "loginSignup",
messages: messages,
hasErrors: messages.length > 0,
form : req.flash("form")
});
};
答案 1 :(得分:0)
为什么不尝试这样的事情?
res.render("admin/index", {
layout: "loginSignup",
messages: messages,
hasErrors: messages.length > 0,
email: req.body('email') || '',
password: req.body('password') || ''
});
注意,这是假设路由已安装在app.post()调用上,并且您使用的是bodyparser中间件,如果使用的是app.get(),则在我的示例中将req.body更改为req.params