Saturday 11 March 2017

passport js local strategy not working

    var express = require('express');
    var passport = require('passport');
    var Strategy = require('passport-local').Strategy;
    var User = require('./routes/authentication.js');

    // Create a new Express application.
    var app = express();

    passport.use(new Strategy(
      function(username, password, cb) {
        User.findByUsername(username, function(err, user) {
         if (err) { return cb(err); }
         if (!user) { return cb(null, false); }
         if (user.password != password) { return cb(null, false); }
          return cb(null, user);
        });
      })
    );

    passport.serializeUser(function(user, cb) {
     cb(null, user.id);
    });

    passport.deserializeUser(function(id, cb) {
     User.findById(id, function (err, user) {
      if (err) { return cb(err); }
      cb(null, user);
     });
    });

    app.use(function(req, res, next) {
     res.header("Access-Control-Allow-Origin", "http://localhost:3000");
     res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With,      Content-Type, Accept");
    res.header("Access-Control-Allow-Credentials", true);
    next();
   });

app.use(require('morgan')('combined'));
app.use(require('cookie-parser')());
app.use(require('body-parser').urlencoded({ extended: true }));
app.use(require('express-session')({ secret: 'keyboard cat', resave: true, saveUninitialized: true }));

// Initialize Passport and restore authentication state, if any, from the
// session.
app.use(passport.initialize());
app.use(passport.session());

// Define routes.
app.get('/',
  function(req, res) {
    res.render('home', { user: req.user });
  });

app.get('/login',
  function(req, res){
    res.render('login');
  });

app.post('/login', 
  function(request, response, next) {
    console.log(request.session)
    passport.authenticate('local', 
    function(err, user, info) {
        if (!user){ response.send(info.message);}
        else {
          console.log(user);
          request.login(user, function(error) {
              if (error) return next(error);
              console.log("Request Login supossedly successful.");
              return response.send('Login successful');
          });
          //response.send('Login successful');
        }

    })(request, response, next);
  }
);

app.get('/logout',
  function(req, res){
    req.logout();
    res.redirect('/');
  });

app.get('/checklog', function (req, res, next) {
  if (req.isAuthenticated()) {
    next();
  } else {
    res.send('login');
  }
}, function (req, res, next) {
  res.send('profile');
})
app.listen(5000);

Any help will be appreciated. The above code is not setting the cookie and because of that the req.isAuthenticated() returns false everytime. There is no problem with findbyid and findbyusername methods. sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss



via Malik Lakhani

No comments:

Post a Comment