На конечной точке POST / login я сохраняю данные req.session.user и вижу данные, правильно сохраненные в коллекции сеансов MongoDB. Но при попытке доступа к req.session.user на другой конечной точке он не определен. Не могу понять, что не так.
мое приложение. js
var express = require('express');
var createError = require('http-errors');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var cors = require('cors');
var session = require('express-session');
var MongoDBStore = require('connect-mongodb-session')(session);
var app = express();
require('./lib/connectMongoose');
require('dotenv').config();
var store = new MongoDBStore({
uri: process.env.MONGOOSE_CONNECTION_STRING,
collection: 'Sessions'
});
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(cors());
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser('secret-key'));
app.use(express.static(path.join(__dirname, 'public')));
app.use(session({
secret: 'secret-key',
cookie: { maxAge: 1000 * 60 * 60 * 24, httpOnly: true },
resave: false,
saveUninitialized: false,
store: store
}));
// Import router
require('./routes/router')(app);
мой POST / логин
router.post('/', async function (req, res) {
try {
const { email, password } = req.body;
const user = await User.findOne({ email });
if (user && await bcrypt.compare(password, user.password)) {
jwt.sign(
{ user },
process.env.JWT_SECRET,
{ expiresIn: '1d' },
(err, token) => {
if (err) {
res.json({ message: 'something went wrong' });
return;
}
req.session.user = {
_id: user._id,
};
res.json({ message: 'user logged successfully', success: true, user, token });
});
return;
мой GET / endpint
router.get('/private/:id', async function (req, res) {
try {
const id = req.params.id;
console.log('session', req.session.user); // This is undefined
...
это сеанс, сохраненный в пн go