nodejs: sessionID меняется после перенаправления.Как сохранить данные сеанса пользователя постоянными? - PullRequest
1 голос
/ 24 апреля 2019

видел много подобных проблем, но не может понять, как это исправить. У меня есть экспресс-сервер, использующий сеансы cookie. Сервер вызывает Google Auth API.

Поскольку это приложение для нескольких пользователей, я должен связать информацию об авторизации Google с ssession пользователя

Я сохраняю эти данные авторизации в сеансе после получения их от Google. Данные хорошо сохраняются в сеансе. Нет проблем здесь

Но после перенаправления на другой экспресс-маршрут сеанс отличается и поэтому не может получить доступ к сохраненным данным.

Вот код

Thks

app.use(
  session({
    name: SESSION_NAME,
    secret: SESSION_SECRET,
    resave: false,
    saveUninitialized: false,
    cookie: {
      maxAge: parseInt(SESSION_LIFETIME, 10), // 24H in config file
      httpOnly: true,
      sameSite: true,
      secure: !IN_DEV
    }
  })
);

googleRouter.get("/oauthcallback", async (req, res) => {
  try {
    if (req.query.code && req.query.code !== "") {
      const oauth2Client = initGoogleAuth();
      const tokens = await getGoogleToken(oauth2Client, req.query.code);

      if (tokens && tokens !== "") {
        const s = await saveTokensInSession(req.session, tokens);

        oauth2Client.setCredentials(tokens);

        // save data in session
        req.session.oauth2Client = oauth2Client;
        req.session.save();

        // oauth2Client is well saved here in session
        console.log(req.session.oauth2Client);

        //redirect to the next url

        res.redirect("/googleauth/test");


      } else res.send("error while getting tokens");
    } else res.send("error while getting  authorization code");
  } catch (error) {
    res.send(`error while getting token : ${error}`);
  }
});


googleRouter.get("/test", async (req, res) => {

 // oauth2Client is empty  here and sessionID is different
 console.log(req.session.oauth2Client);
});
...