express -сессия: сеанс недоступен на других маршрутах - PullRequest
0 голосов
/ 02 апреля 2020

Я использую express -сессию для хранения токена аутентификации в сеансе. Проблема, с которой я сталкиваюсь, заключается в том, что сеанс, который я установил в /authenticate (после маршрута), не является неопределенным в /join (получить маршрут). Я искал похожие вопросы, но это не помогло. Есть идеи, что не так в моем коде?

сервер. js

// All required modules loaded..

// Session config
app.use(
  session({
    secret: "mysessionsecret",
    resave: false,
    saveUninitialized: false,
    cookie: { secure: false, maxAge: 6000000 }
  })
);

// @route:authenticate
app.post("/authenticate", async (req, res) => {
  const { username, password } = req.body;

  try {
    const user = await User.findOne({ username });

    if (!user) {
      return res.status(400).json({ msg: "Invalid username entered" });
    }

    // Compare the password
    const compare = await bcrypt.compare(password, user.password);

    if (!compare) {
      return res.status(400).json({ msg: "Incorrect password" });
    }

    // Create token of the user ID
    jwt.sign(
      {
        userId: user.id
      },
      config.get("jwtSecret"),
      {
        expiresIn: "2d"
      },
      (err, token) => {
        if (err) throw err;

        if (!req.session.user_id) {
           req.session.token = token;

           console.log(req.session.token); // Accessable here
        }
      }
    );

    res.end();
  } catch (error) {
    return res.send("Server error");
  }
});



   // @route:get /join
   app.get("/join", (req, res) => {
    console.log(req.session.token); // token not accessable here. returns undefined

     return res.end();
   });

1 Ответ

1 голос
/ 02 апреля 2020

Токен не будет у повара ie, это только на сервере. Повар ie - это просто идентификатор сессии. Имя по умолчанию для express сессионного повара ie: connect.sid. Там должен быть повар ie с таким именем.

Если вы нигде не видите этого повара ie, попробуйте saveUninitialized:true. Вы также можете попробовать позвонить req.session.save() после изменения сеанса в маршруте /authenticate. Любой из них должен заставить сессионный повар ie быть установленным.

Когда вы устанавливаете saveUnitialized: false, вы говорите express -сессии НЕ устанавливать ваш сеансовый повар ie, пока вы не скажете ему , К сожалению, do c на самом деле не говорит, как вы говорите, чтобы теперь установить сессионный повар ie. Я предполагал, что req.session.save() может сделать это, или просто поворот saveUnitialized в true также сделает это. Вы можете поэкспериментировать только с одним из двух изменений, хотя теперь у вас есть сессионный повар ie, поэтому вам придется его очистить, чтобы протестировать только с одним из них.

...