首页 > 解决方案 > 从另一个端点检索时,使用 express-session 保存到 req.session 的数据为空

问题描述

我正在实现快速会话的简单使用,并将当前登录的用户保存到会话中。当我将它记录到get路由上的控制台时,会话具有currentUser密钥,但该值只是一个空对象,如果我登录currentUser保存会话的中间件req.session具有正确的数据。看起来数据没有持久化,但我觉得奇怪的是它有键,但没有值。

我省略了与问题无关的部分代码。

// saveLoggedInUser middleware
  const saveLoggedInUser =  async (req, res, next) => {
    const User = await req.body;
    req.session.currentUser = User;
    req.session.save();
    console.log(req.session.currentUser); // Logs correct data

    //const  usersFromDB = await fetchUsersFromDB().catch((e) => {console.log(e)});
    //findCommonUser(usersFromDB,User);
    //app.set('Users', User);
    
    next();
  };
  
  // GetUserInvoices
  
userInvoices.get('/fetchUserInvoices', async (req,res) => {
 
  try {

    const invoices = await InvoiceModel.find().catch((e) => {console.log(e)});
    const user =  req.session.currentUser;
    console.log(user); // logs the empty object value.
    
  } catch (error) {
    console.log(error)
  } 
  
  // server.js
  
  
app.use(express.json());
app.use(cors());
app.use(express.static(path.join(__dirname, 'build')));
app.use('/', cookieValidationMiddleware, StoreInvoiceRouter);

app.use(expressSession({
  secret: process.env.SESSION_SECRET,
  resave: false,
  saveUninitialized: false,
  cookie: {secure: false}
}));

app.use('/', saveLoggedInUserMiddleware, UserInvoicesRouter);
app.use('/', UpdateUserProfileRouter);



app.get('*', async (req,res) => {

  res.sendFile(path.join(__dirname, 'build', 'index.html'));
  
  });

标签: javascriptnode.jsreactjsexpressauthentication

解决方案


问题在于saveLoggedInUser它没有附加方法。下面是我使用的最终代码。

// server.js
  app.use(
    expressSession({
          secret: process.env.SESSION_SECRET,
          resave: false,
          saveUninitialized: false,
      })
  );
app.use(express.json());
app.use(cors());
app.use(express.static(path.join(__dirname, 'build')));
app.use('/', cookieValidationMiddleware, StoreInvoiceRouter);
app.use('/', saveLoggedInUserMiddleware, UserInvoicesRouter);
app.use('/', UpdateUserProfileRouter);



app.get('*', async (req,res) => {

  res.sendFile(path.join(__dirname, 'build', 'index.html'));
  
  });
  
  //saveLoggedInUser Middleware
  saveLoggedInUser.post('/saveUser', async (req,res,next) => {
  const User = await req.body;
  req.session.currentUser = User;
  

  const  usersFromDB = await fetchUsersFromDB().catch((e) => {console.log(e)});
  findCommonUser(usersFromDB,User);
  next();

})
// getUserInvoices
userInvoices.get('/fetchUserInvoices', async (req,res) => {
 
  try {

    const invoices = await InvoiceModel.find().catch((e) => {console.log(e)});
    const user =  req.session.currentUser;
    console.log('USER',user);
 

    const userInvoices =  await app.get('userInvoices')
   req.session.invoices = userInvoices
   var currentInvoices = req.session.invoices;
    res.json(currentInvoices);
    

  } catch (error) {
    console.log(error)
  } 
  });


推荐阅读