Приведенный ниже код отлично работает при использовании хранилища сеансов по умолчанию MemoryStore
, но когда я устанавливаю PouchSession
в качестве хранилища сеансов, req.session.passport больше не устанавливается. Я вижу, что user.user
сохраняется на сервере, но по какой-либо причине req.session.passport больше не существует / не создается. Кто-нибудь знает, что я делаю не так? Или 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...'));
паспорт. 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');
});