好吧,我尝试研究了很多其他类似的案例,但是由于它不完全符合我的能力,所以找不到真正的解决方案。
当我尝试登录时,出现错误
缺少凭据
如果我的表单为空,或者用户名/密码为空。
但是,如果我用错误的信息填写表格,则会得到我想要的自定义错误。
这是我的路线
server.get('/login', async (req, res) => {
if(typeof req.user != 'undefined')
res.redirect('/loginRedirect')
else
res.render('public assets/template.ejs', {
page_title: "iWatched.xyz - Sign in/up",
page_file: "login",
page_data: {
login_error: req.flash(),
signup_error: req.flash()
},
user: req.user
});
});
server.post('/login',
passport.authenticate('local-login', {
successRedirect: '/loginRedirect',
failureRedirect: '/login',
failureFlash: true
})
);
这是我的本地登录策略
passport.use('local-login', new LocalStrategy({
usernameField: 'email',
passwordField: 'password',
passReqToCallback: true
},
function (req, login, password, done) {
User.findOne({$or: [
{'local.email':new RegExp('^'+login+'$', "i") },
{'local.username': new RegExp('^'+login+'$', "i")}
]}, function (error, user) {
if (error)
return done(null, false, req.flash('error', {'error': error, 'login' : login}));
if (!user)
return done(null, false, req.flash('error', {'error': 'No user found.', 'login' : login}));
if (!user.validPassword(password))
return done(null, false, req.flash('error', {'error': 'Oops! Wrong password.', 'login' : login}));
return done(null, user);
});
})
);
很抱歉,如果我在这里的其他地方错过了答案,但是我经历了很多不同的尝试而没有运气,我将不胜感激:)