2017-10-28 6 views
0

私は2人のモデルがログインできる(どれもユーザーではありません)、1人は申請者、もう1人は雇用者です。 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); 
}); 

が、これは次のエラー与える: "メッセージを": "errorErrorは:セッションにユーザーをシリアル化に失敗しました"

助けてください。

答えて

0

は、以下のone.Thereと、ローカルの戦略は、あなたのcode.Also、代わりにEmployer.find()

//passport local strategy 

    passport.use('employer', new LocalStrategy({usernameField: 'email', 
    passwordField: 'password', 
    session: false 
    }, 
    function(username, password, done){ 

    Employer.findOne({email:username}, function(err, employer){ 
     if(err) { 
      return done(err, null, null); 
     } 
     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'}); 
      } 
     }); 
    }); 
} 
)); 
Employer.findOne()を使用して単一の雇用者のためのクエリのタイプミスで比較します
関連する問題