Alex
Alex

Reputation: 134

Error: Cannot read property 'user' of null when calling passport.serializeUser

so I have the next in my passport.js file:

const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
var connection = require('./database');
const User = require('./models/user');

const verifyCallback = (username, password, done) => {

  User.findUser(username).then((user) => {
    if(!user)
      return done(null, false);

    const isValid = User.validPassword(password, user[0].password).then((isValid)=>{

      if(isValid)
        return done(null, user);
      else
        return done(null, false);

    })
  })
  .catch((err) =>{
    done(err);
  });
};

const strategy = new LocalStrategy(verifyCallback);

passport.use(strategy);

passport.serializeUser((user, done) => {
  console.log(user + "\n" + user.id);
  done(null. user.id);
});

passport.deserializeUser((userId, done) => {
  User.findById(userId)
    .then((user) =>{
        done(null, user)
    })
    .catch(err => done(err));
})

Everything works fine until the function passport.serializeUser which return the error Cannot read property 'user' of null I don't know where is the user param coming from, I was following a tutorial but the guy didn't explained. How should I solve that error? Here is the route:

var express = require('express');
var router = express.Router();
var passport = require('passport');
const controller = require('../controllers/LoginController');

router.get('/', controller.getLoginPage);
router.post('/', passport.authenticate('local', {failureRedirect: '/', successRedirect: '/register'}),controller.login);

module.exports = router;

Upvotes: 1

Views: 405

Answers (1)

Akash
Akash

Reputation: 4553

As per you code you have written done(null. user.id);, it should be done(null, user.id);

You have used . instead of a ,

Upvotes: 1

Related Questions