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