solzimer / session-pouchdb-store

PouchDB express session store. Can do realtime session data synchronization via PouchDB server
5 stars 9 forks source link

req.session.passport does not get set #3

Open pink-carp opened 4 years ago

pink-carp commented 4 years ago

The below code works great when using the default MemoryStore or other stores such as ´memorystore´ or ´session-file-store´session storage but when I set PouchSessionas the session store req.session.passport no longer gets set. I can see that user.user is getting saved on the server but for ever reason req.session.passport no longer exists/gets created. I don't really have much experience with development so there is a good chance I am doing something wrong but since the other stores work fine I am wondering if something could be up with ´session-pouchdb-store´

const express = require('express');
const session = require('express-session');
const PouchSession = require("session-pouchdb-store");
const app = express();
const nano = require('nano');
const passport = require('passport');
const PORT = 5000;

require('./passport')(passport);
app.use(express.urlencoded({extended: true}));

app.use(session({
  secret: 'thisismysecret',
  resave: false,
  saveUninitialized: false,
  cookie: { secure: false},
    store : new PouchSession('http://admin:password@localhost:5984/sessions')
}));

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

app.use('/', require('./routes/index'));
app.use('/users', require('./routes/users'));

app.listen(PORT, () => console.log('server running...'));

passport.js

const LocalStrategy = require('passport-local').Strategy;
const nano = require('nano')('http://admin:password@localhost:5984');
const users = nano.use('users');
const bcrypt = require('bcrypt');

module.exports = function(passport) {
  passport.use(new LocalStrategy(
  function(username, password, done) {
    users.view('auth', 'auth', {'key': username, 'include_docs': true})
    .then(dbresponse => {
      if (dbresponse.rows.length === 1) {
        const user = dbresponse.rows[0].doc;
        bcrypt.compare(password, user.password, function(err, result) {
          if(result === true) {
            done(null, user)
          } else {
            done(null, false)
          }
        });
      } else {
        done(null, false);
      }
    })
    .catch(err => {
      console.log(err);
      done(null, false);
    })
  }
));

passport.serializeUser(function(user, done) {
  console.log("serializeUser");
  done(null, user.user);
});

passport.deserializeUser(function(id, done) {
  console.log("deserializeUser");
  done(null, 'test');
});
TheTechmage commented 11 months ago

After doing some research, this appears to be related to #2