【发布时间】:2017-10-28 19:15:36
【问题描述】:
我有两种可以登录的模型(都不是用户)一种是申请人,另一种是雇主。 passportEmployer 配置文件就是这个,类似于 passportApplicant 配置文件。
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var Employer = require('../controllers/EmployerController');
//passport middleware
passport.serializeUser(function(employer, done) {
done(null, employer._id);
});
passport.deserializeUser(function(id, done) {
Employer.findById(id, function (err, employer) {
done(err, employer);
});
});
//passport local strategy
passport.use( 'employer', new LocalStrategy({usernameField: 'email',
passwordField: 'password',
session: false
},
function(username, password, done){
Employer.find({email:username}, function(err, employers){
if(err) {
return done(err, null, null);
}
var employer = employers[0];
if(!employer){
return done(null, false, { 'confirmation':'fail', message: 'Unknown Employer'});
}
Employer.comparePassword(password, employer.password, function(err, isMatch){
if(err) {
return done(err, null, null);
}
else if(isMatch){
return done(null, Employer, {'confirmation':'success', 'result':employer});
}else{
return done(null, false, {'confirmation':'fail', message: 'Invalid Password'});
}
});
});
}
));
module.exports = passport;
以及以下登录路径:
router.post('/employer/login', function(req, res, next){
employerPassport.authenticate('employer', function(err, employer, info){
if(err) {
res.status(400).json({'confirmation':'fail', 'message':err})
}
else if(!employer){
res.status(400).json(info)
}
else{
req.login(employer, function(err){
if(err){
res.status(400).json({'confirmation':'fail', 'message':'error'+err})
}else{
console.log('Authentication Successful');
res.json(info)
}
});
}
})(req, res, next);
});
但这会产生以下错误: "message": "errorError: 无法将用户序列化到会话中"
请帮忙。
【问题讨论】:
标签: node.js session express passport.js