Session 不在 express 中保存不同路线的数据
Session doesn't save data for different routes in express
我有一个登录系统,应该将用户登录保存到 session。
我的 back-end 是 Nodejs(express) 而我的 front-end 是 Reactjs(with redux)。
我正在使用 axios 将用户名和密码发送到 back-end。我的数据得到评估,用户 ID 被保存到 session。到目前为止一切顺利,但如果我向另一条路线发送请求,用户 session 将会消失。
我看了一些类似的问题,但一无所获。这是我的代码:
这是我的express-session
const session = require('express-session');
app.use(session({
secret: process.env.SESSION_SECRET,
resave: true,
saveUninitialized: true,
cookie: {maxAge: 259200000, httpOnly: true}
}));
这是我的 axios 请求
Note: I already set base url for url: "signin", the request is going
to http://localhost:5000/signin
axios({
method: "post",
url: "signin",
withCredentials: false,
headers: {
"Access-Control-Allow-Origin": "*",
"Content-Type": "application/json",
Accept: "application/json"
},
data:{
"username": /*username*/`,
"password": `/*password*/``
}
}).then(res => {
if(res.status === 200){
if(res.data.status){
dispatch({type: "LOGGED_IN"}) // just changes the state{authenticated : true}
}else{
dispatch({type: "NOT_LOGGED_IN"}) // just changes the state{authenticated : false}
}
}
})
}
在登录路径中,在评估我的用户名和密码后,我将用户 ID 保存到 session:
req.session.user = user._id
next()
下一个中间件我还有req.session.user.
我有一个 API 用于检查用户 session
if(req.session.user){
res.send(true);
}else{
res.send(false);
}
如果我在登录后向它发出请求,我得到 false
When I login and make the request with postman it returns true but with axios I get false
我对 API 的 axios 请求是:
axios({
method: "post",
url: "checklogin",
withCredentials: false,
headers: {
"Access-Control-Allow-Origin": "*",
"Content-Type": "application/json",
Accept: "application/json"
}
}).then(res => {
if(res.status === 200){
if(res.data){
dispatch({type: "LOGGED_IN"})
}else{
dispatch({type: "NOT_LOGGED_IN"})
}
}
})
好的,问题解决了。我将 withCredentials 设置为 false,因为当它为 true 时,我一直收到 CORS 错误。如果我的来源(在 cors 模块设置中)等于“*”,则不允许凭据,因此我将我的来源更改为我的前端域并将凭据设置为 true(在 cors 模块设置中),现在我得到了真实的响应。
我有一个登录系统,应该将用户登录保存到 session。 我的 back-end 是 Nodejs(express) 而我的 front-end 是 Reactjs(with redux)。 我正在使用 axios 将用户名和密码发送到 back-end。我的数据得到评估,用户 ID 被保存到 session。到目前为止一切顺利,但如果我向另一条路线发送请求,用户 session 将会消失。 我看了一些类似的问题,但一无所获。这是我的代码:
这是我的express-session
const session = require('express-session');
app.use(session({
secret: process.env.SESSION_SECRET,
resave: true,
saveUninitialized: true,
cookie: {maxAge: 259200000, httpOnly: true}
}));
这是我的 axios 请求
Note: I already set base url for url: "signin", the request is going to http://localhost:5000/signin
axios({
method: "post",
url: "signin",
withCredentials: false,
headers: {
"Access-Control-Allow-Origin": "*",
"Content-Type": "application/json",
Accept: "application/json"
},
data:{
"username": /*username*/`,
"password": `/*password*/``
}
}).then(res => {
if(res.status === 200){
if(res.data.status){
dispatch({type: "LOGGED_IN"}) // just changes the state{authenticated : true}
}else{
dispatch({type: "NOT_LOGGED_IN"}) // just changes the state{authenticated : false}
}
}
})
}
在登录路径中,在评估我的用户名和密码后,我将用户 ID 保存到 session:
req.session.user = user._id
next()
下一个中间件我还有req.session.user.
我有一个 API 用于检查用户 session
if(req.session.user){
res.send(true);
}else{
res.send(false);
}
如果我在登录后向它发出请求,我得到 false
When I login and make the request with postman it returns true but with axios I get false
我对 API 的 axios 请求是:
axios({
method: "post",
url: "checklogin",
withCredentials: false,
headers: {
"Access-Control-Allow-Origin": "*",
"Content-Type": "application/json",
Accept: "application/json"
}
}).then(res => {
if(res.status === 200){
if(res.data){
dispatch({type: "LOGGED_IN"})
}else{
dispatch({type: "NOT_LOGGED_IN"})
}
}
})
好的,问题解决了。我将 withCredentials 设置为 false,因为当它为 true 时,我一直收到 CORS 错误。如果我的来源(在 cors 模块设置中)等于“*”,则不允许凭据,因此我将我的来源更改为我的前端域并将凭据设置为 true(在 cors 模块设置中),现在我得到了真实的响应。