Экспресс-сессия mongodb не сохраняется - PullRequest
0 голосов
/ 09 октября 2019

Я новичок в сессиях, и это мой первый серьезный проект по кодированию. Я попробовал миллион вещей, и я не могу понять, почему сеанс не продолжается по разным маршрутам. Когда я регистрирую req.session.id с двух маршрутов, он дает мне два разных идентификатора, когда он должен быть одинаковым.

const express = require('express');
const cors = require('cors');
const mongoose = require('mongoose');
const session = require('express-session');
const bcrypt = require('bcrypt');
let User = require('./models/user.model');
const MongoStore = require('connect-mongo')(session);

require('dotenv').config();

const app = express();
const port = process.env.PORT || 5000;

app.set('trustproxy', true);

app.use(cors(corsOptions));
app.use(cors());
app.use(express.json());

const uri = process.env.ATLAS_URI;
mongoose.connect(uri, { useNewUrlParser: true, useCreateIndex: true, useUnifiedTopology: true });
const connection = mongoose.connection;
connection.once('open', () => {
    console.log("MongoDB database connection established successfully")
})

app.listen(port, () => {
    console.log(`Server is running on port: ${port}`);
});

const SESS_NAME = 'session';
const SESS_SECRET = 'youshouldchangethis'
const IN_PROD = false;

app.use(session({
  name: SESS_NAME,
  resave: false,
  store: new MongoStore({ mongooseConnection: mongoose.connection }),
  saveUninitialized: true,
  secret: SESS_SECRET,
  proxy: true,
  cookie: {
      sameSite: true,
      secure: IN_PROD,
  }
}));

Маршрут входа создает сеанс (в данный момент сеанс хранится в Mongodb очень хорошо), затем реагирует на перенаправление на панель мониторинга, где req.session возвращается неопределенным, и я не могу получить доступ к этомусессия. Вот маршруты входа в систему и панель инструментов. Любая помощь с благодарностью!

app.post('/login', (req, res) => {
  console.log("in login post");
  User.findOne({ email: req.body.email })
    .then(user => {
      bcrypt.compare(req.body.password, user.password, function (err, result) {
        if(result == true){
          req.session.userId = user._id;
          console.log(req.session.id);
          res.send(user);
        } else {
          res.send('Authentication Failed');
        }
      })
    })
    .catch(err => res.send('Authentication Failed'));
});

// Dashboard Router
app.get('/dashboard', (req, res) => {
  if (req.session.userId){
    User.findOne({ email: req.session.user.email }) // FIX: not able to find session / user
      .then(user => {
        console.log("found user")
        // req.session.user = user;
        res.send(user);
      })
      .catch(err => {
        //req.session.reset();
        res.send(err);
      })
  } else {
    console.log(req.session.id);
  }
});

1 Ответ

0 голосов
/ 09 октября 2019

Я нашел это в express-session документах, возможно, это то, что вы ищете:

Session.save (обратный вызов)

.. .. В некоторых случаях полезно вызывать этот метод, например, перенаправляет , долгоживущие запросы или в WebSockets.

req.session.save(function(err) {
  // session saved
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...