我正在构建一个简单的登录/登录客户端,我想在登录或登录时在会话中存储“客户端 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 上看过很多关于这个问题的帖子,并尝试了提供的解决方案,但问题仍然存在。
如果有人可以帮助我弄清楚可以采取什么措施来解决这个问题,我将不胜感激。
如果需要更多信息,请告诉我。