我正在Node.js中开发一个招聘门户,注册时,用户必须告诉他/她是HR,并且已将其保存在数据库中。在我的用户Schema中,有一个属性名称为isHr,如果用户是HR,则为true;如果是普通用户(求职者),则为false。 现在,当我使用本地护照进行登录时,在对用户进行身份验证之后,我想将不是HR的用户重定向到另一个页面,并将一个HR的用户重定向到另一个页面。
这是我的帖子/登录路线:
router.post("/login", function(req, res, next) {
User.find({ email: req.body.email }, function(err, user) {
if (err) {
req.flash('error_msg', 'No user found for this email');
res.redirect('/users/login');
} else if (user.isHr === true) {
passport.authenticate('local', {
successRedirect: '/hr/postjob',
failureRedirect: '/users/login',
failureFlash: true
})(req, res, next);
} else {
console.log(user);
passport.authenticate('local', {
successRedirect: '/users',
failureRedirect: '/users/login',
failureFlash: true
})(req, res, next);
}
})
})
我不知道应该在哪里检查这种情况?因为这不起作用,并且每次都重定向到 / users 网址。
我的password.js文件具有以下内容:
module.exports = function(passport) {
passport.use(new LocalStrategy({ usernameField: 'email' }, (email,
password, done) => {
//Match user
User.findOne({
email: email
}).then(user => {
if (!user) {
return done(null, false, { message: 'No user found' })
console.log('No user found')
}
//Match the password
bcrypt.compare(password, user.password, (err, isMatch) => {
if (err) throw err;
if (isMatch) {
return done(null, user);
} else {
return done(null, false, { message: 'Uh oh !
incorrect password' });
}
})
})
}));
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
}
当我在帖子/登录路线中执行console.log(user)时,我的用户就是这样
[ { _id: 5db26c62ab402f32ed345572,
name: 'Hr ashutosh',
email: 'hrashutosh@gmail.com',
password:
'$2a$10$2utKP/FKTpYLOGwc.g/FAeN44IJ4/e8L.IqMhB9KqKAHeePdBLGXy',
isHr: true,
__v: 0 } ]
请原谅我在语法上的错误。