Кажется, я не могу понять, почему после аутентификации пользователь не сохраняется в сеансе, req.user всегда кажется неопределенным даже после успешной аутентификации. Я вижу, что вызывается serializeUser, но req.user всегда кажется пустым
Я использую http, я также пробовал опцию {secure: false}, но, к сожалению, безуспешно
App js code
const express = require('express');
const cors = require('cors');
const http = require('http');
const app = express();
//Database imports
const mongoose = require('mongoose');
const passport = require('passport');
const session = require('express-session');
//Parsers
const cookies = require("cookie-parser");
const bodyParser = require('body-parser');
require('dotenv/config')
// parse application/x-www-form-urlencoded
app.use(bodyParser.json({limit: '10mb', extended: true}))
app.use(bodyParser.urlencoded({limit: '10mb', extended: true}))
app.use(cookies('asdf33g4w4hghjkuil8saef345'));
app.use(cors({ credentials: true }));
//React app
//app.use(express.static(__dirname+'/build'))
require('./passport/passport')(passport);
app.use(session({ secret: 'asdf33g4w4hghjkuil8saef345',cookie : {
expires: false,
},resave: true,
saveUninitialized: true,
cookie: {
httpOnly: true,
expires: 360*400 // use expires instead of maxAge
}
}));
app.use(passport.initialize());
app.use(passport.session());
mongoose.connect(process.env.MONGO_URI, () => {
console.log('Connected to database');
});
function isBlocked(req, res, next) {
if (req.user && req.user.status) {
// user is authenticated
next();
} else {
// return unauthorized
res.send(401, "Unauthorized");
}
};
app.use('/' , require('./routes/auth'));
var server = http.createServer(app);
const PORT = process.env.PORT || 5000;
server.listen(PORT, console.log(`Server started on port ${PORT}`));
Конфигурация паспорта
const LocalStrategy = require('passport-local').Strategy;
const bcrypt = require('bcryptjs');
// Load User model
const User = require('../models/User');
module.exports = function(passport) {
passport.use(
new LocalStrategy({ usernameField: 'username' }, (username, password, done) => {
// Match user
User.findOne({
username: username
}).then(user => {
if (!user) {
return done(null, false, { message: 'User not found' });
}
// Match password
bcrypt.compare(password, user.password, (err, isMatch) => {
if (err) throw err;
if (isMatch) {
return done(null, user);
} else {
return done(null, false, { message: 'Password incorrect' });
}
});
});
})
);
passport.serializeUser(function(user, done) {
done(null, user.username);
});
passport.deserializeUser(function(id, done) {
User.findOne({username:id}, function(err, user){
if(!err){
console.log('no err')
done(null, user)
}
else{
console.log('error')
done(err, null)
}
console.log(user)
})
})}
Как я обрабатываю вход в систему
router.post('/login',
passport.authenticate('local', { failureRedirect: '/login' },),
function(req, res) {
req.session.save(function(){
res.redirect('/true');
});
});