MI Sabic
MI Sabic

Reputation: 387

Passport session not working

I'm trying to build a login system using express and passport.

As far as I know, I can use the req.user to access user id and correctly store their actions and req.isAuthenticated() would be true if Passport is working properly, however it isn't working.

For some reason, req.user is always undefined and req.isAuthenticated() is always false.

This is my app.js ->

const express = require('express');
const http = require('http');
const session = require('express-session');
const bodyParser = require('body-parser');

const passport = require('passport');

const route = require('./controllers/core');          **// CORE.JS**

const app = express();

app.set('view engine', 'ejs');

app.use('/css', express.static('css'));
app.use('/js', express.static('js'));
app.use('/themify', express.static('themify'));

app.use(session({
    secret: 'keyboard cat',
    resave: false,
    saveUninitialized: false
    //cookie: { secure: true }
}));

app.use(bodyParser.urlencoded({ extended: false }));
app.use(passport.initialize());
app.use(passport.session());

app.use(route);

//core(app);

app.listen(3000);

And this is my core.js

const router = require('express').Router();

const passport = require('passport');
const bodyParser = require('body-parser');
const mysql      = require('mysql');
const connection = mysql.createConnection({
    host     : 'localhost',
    user     : 'root',
    password : '',
    database : 'pharmate',
    dateStrings: 'date'
});


const urlencodedParser = bodyParser.urlencoded({ extended: false });

router.get('/index', function(req,res){
    console.log(req.user);
});

router.post('/index', urlencodedParser, function(req,res){

    var email = req.body.email;
    var pass = req.body.password;
    connection.query("SELECT `Pharmacy_ID`, `Email`, `Password` FROM `pharmacy` WHERE Email = ? AND Password = ?", [email, pass], function (error, results, fields) {
        if (error) res.send(error);//throw error;
        else{
            if(results.length>0){

                req.login(results[0], function(err){
                    res.redirect('index');
                });
            }
            else{
                res.redirect('login');
            }
        }
    });

});


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

passport.deserializeUser(function(id, done) {
    done(null, user);
});

module.exports = router;

Any help would be appreciated. Thanks in advance.

Upvotes: 0

Views: 751

Answers (1)

bthe0
bthe0

Reputation: 1424

You should handle the authentication like:

app.post('/login',
  passport.authenticate('local', {
    successRedirect: '/secret',
    failureRedirect: '/login',
  })
);

Did you setup the passport local strategy ?

Upvotes: 0

Related Questions