使用 Express 时会话数据不会持续存在

问题描述 投票:0回答:0

我正在构建一个简单的登录/登录客户端,我想在登录或登录时在会话中存储“客户端 ID”,然后客户端将访问会话信息以检索 clientID 并使用它来呈现一个 UserDetails 页面。 问题是,当我在会话中保存 userID 时,我尝试在另一个请求上访问它,但没有存储任何数据。

我正在构建一个简单的登录/登录客户端,我想在他们登录或登录时在会话中存储“客户端 ID”。

这是我的快速会话配置:

const oneDay = 1000 * 60 * 60 * 24;

const app = express();
app.use(sessions({
    secret: `${process.env.SESSION_SECRET}`,
    saveUninitialized:false,
    cookie: { maxAge: oneDay },
    resave: false,
}));

因为我的服务器和客户端在不同的端口上工作,所以我也使用 CORS,如下所示:

app.use(
    cors({
        origin: 'http://localhost:5173',
        methods: 'GET,POST,PUT,DELETE',
        credentials: true,
    })
);

用户 ID 存储在 Postgres 数据库中,我通过提供电子邮件和密码来访问它们,这是我的登录函数

const logIn = (req, res) =>{
    const email = req.body.body.email
    const password = sign(req.body.body.password,process.env.ENCODE_SECRET)
    pool.query('SELECT id FROM users WHERE email = $1 AND password = $2', [email, password], (error, results) =>{
        if (error) {
            throw error
        }
        req.session.user = results.rows[0];
        console.log(req.session);
        res.status(200).json({
            error: false, 
            message: 'Log in success',
            user: results.rows[0],
        }); 
        }
    });
}

会话在 console.log() 上看起来像这样

Session {
  cookie: {
    path: '/',
    _expires: 2023-08-04T18:32:12.698Z,
    originalMaxAge: 86400000,
    httpOnly: true
  },
  user: { id: 21 }
}

然后我有一个函数来检查客户端根目录上是否有活动会话,然后存储用户ID,然后重定向到用户信息页面

const logInSuccess = (req, res) => {
    console.log('verificamos el log in')
    //session = req.session;
    console.log(req.session)
    if (req.session.user) {
        console.log('usuario en sesion')
        res.status(200).json({
            error: false, 
            message: 'Log In Success',
            user: req.session.user,
        });
    } else {
        res.status(403).json({error: true, message: 'Not Authorized'});
    }
}

console.log() 显示一个没有用户数据的新 cookie

Session {
  cookie: {
    path: '/',
    _expires: 2023-08-04T18:32:13.026Z,
    originalMaxAge: 86400000,
    httpOnly: true
  }
}

logInSuccess 函数返回 403 状态,因为会话上没有用户数据。

在我的客户端上,我使用带有 Axios 的 Vite + React 应用程序来处理我的请求,并且我的所有请求都具有“withCredentials: true”配置,如本示例所示

const result = await axios.post(`${import.meta.env.VITE_REACT_APP_API_URL}/login`,{
   withCredentials: true,
   headers: {Accept: 'application/json',
   'Content-Type': 'application/json'},
   body: userDetails,
})

我在 StackOverflow 上看过很多关于这个问题的帖子,并尝试了提供的解决方案,但问题仍然存在。

如果有人可以帮助我弄清楚可以采取什么措施来解决这个问题,我将不胜感激。

如果需要更多信息,请告诉我。

node.js reactjs express vite express-session
© www.soinside.com 2019 - 2024. All rights reserved.