Sunday, 7 May 2017

Logging in with Node and Passport returning false

I have been trying to follow mherman's PostgreSQL Node and Passport tutorial, but am getting false (Username, Password) not false everytime I attempt to login to my database. The username and password both print to the console correctly when pulled from the form. I have the following code which results in the above output. I have looked through stackoverflow, but most of the solutions were due to not calling initialize or session on passport, which cannot be the case here.

    var express = require("express"),
        bodyParser = require("body-parser"),
        passport = require("passport"),
        LocalStrategy = require("passport-local").Strategy,
        session = require("express-session")

var knex = require("knex")({
    client: 'pg',
    connection: {
        user: 'zzzzzzzz',
        database: 'zzzzzzzzz',
        password: 'zzzzzzzz',
        host: 'zzzzzzzzzzzzzzzz.amazonaws.com',
        port: zzzzzzzzz
    }
});

app.use(session({
    secret: "my secret",
    resave: false,
    saveUninitialized: true
}));

app.use(bodyParser.urlencoded({extended: true}));

app.use(express.static(__dirname + "/public"));
app.set("view engine","ejs");

app.use(passport.initialize());
app.use(passport.session());

const bcrypt = require("bcryptjs");

function comparePass(userPassword, databasePassword) {
  return bcrypt.compareSync(userPassword, databasePassword);
}

const options = {username: 'email', password: 'password'};

passport.use(new LocalStrategy(options, (username, password, done) => {
  // check to see if the username exists
  knex.withSchema('users').from('user').where('email',username)
  .then((user) => {
    if (!user) return done(null, false);
    if (!comparePass(password, user.password)) {
      return done(null, false);
    } else {
      return done(null, user);
    }
  })
  .catch((err) => { return done(err); });
}));


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

passport.deserializeUser((id, done) => {
    knex.withSchema('users').select("user_id").from("user").where("user_id",id)
    .then((user) => { done(null, user); })
    .bind(console)
    .then(console.log+" deserializeUser")
    .catch((err) => { done(err,null); });
  });

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

function handleResponse(res, code, statusMsg) {
  res.status(code).json({status: statusMsg});
}

app.post('/login', (req, res, next) => {
  passport.authenticate('local', (err, user, info) => {
      console.log(user,req.body.email,req.body.password);
    if (err)  console.log(err);  //{ handleResponse(res, 500, 'error'); }
    if (!user) console.log("Not "+user); // { handleResponse(res, 404, 'User not found'); }
    if (user) {
      req.logIn(user, function (err) {
        if (err) { handleResponse(res, 500, 'error'); }
        handleResponse(res, 200, 'success');
      });
    }
  })(req, res, next);
});



via a programmer

No comments:

Post a Comment