Localhost React 应用程序未从 Heroku 托管节点接收 cookie API
Localhost react app not receiving cookie from Heroku hosted node API
我可以通过 heroku 托管节点使用 POSTMAN 登录和注销 API。
在我的 React 应用程序中,使用 AXIOS (withcredentials:true) 的 API 调用没有设置护照 cookie,导致会话无法持续。 Localhost react 和 Localhost 服务器没有这个问题。
HEROKU SERVER SIDE,我有以下代码:
app.use(cors({
origin: "http://localhost:3000",
credentials: true
}));
app.enable('trust proxy');
mongoose.connect(dbconfig.url, {
useUnifiedTopology: true,
useNewUrlParser: true,
useCreateIndex: true,
useFindAndModify: false });
// Parse URL-encoded bodies (as sent by HTML forms)
app.use(express.urlencoded({extended: true}));
app.use(cookieParser('street'));
app.use(session({
secret: 'katsura street',
resave: true,
saveUninitialized: true,
proxy: true,
store: new MongoStore({ mongooseConnection: mongoose.connection },)
}));
app.use(passport.initialize());
app.use(passport.session());
我已经检查过 cookie 解析器在会话之上,
会话在通行证之前初始化。
我的 cors 会影响我本地的 reactapp 吗?而不是本地主机,我应该引用我本地计算机的外部 API?
反应方:
Axios.post(Config.ServerURL + 'auth/login',
{email: this.state.email, password: this.state.password},
{
withCredentials: true
}).then(result => {
console.log(result.data);
}).catch(error => {
//make sure message doesn't crash
if (error.response !== undefined) {
try {
console.log(error.response);
this.setState({message: error.response.data.info.message})
}catch(error) {
console.log(error);
}
}
});
查看headers看到cookies发送但是被过滤掉了,来到一篇文章:heroku blog
2019年后,Chrome等浏览器禁用跨域cookie以防止CSRF攻击
在我的用例中,我可以在节点 API 服务器上使用以下命令将其关闭:
app.use(session({
secret: 'street',
resave: true,
saveUninitialized: true,
proxy: true,
cookie: {
sameSite:'none',
secure:true
},
store: new MongoStore({ mongooseConnection: mongoose.connection },)
}));
将 samesite 更改为 none,将允许 chrome 使用跨域设置您的 cookie。
就我而言,它只是在会话设置中将 cookie.sameSite
设置为 "none"
,将 proxy
设置为 true
。
我可以通过 heroku 托管节点使用 POSTMAN 登录和注销 API。 在我的 React 应用程序中,使用 AXIOS (withcredentials:true) 的 API 调用没有设置护照 cookie,导致会话无法持续。 Localhost react 和 Localhost 服务器没有这个问题。
HEROKU SERVER SIDE,我有以下代码:
app.use(cors({
origin: "http://localhost:3000",
credentials: true
}));
app.enable('trust proxy');
mongoose.connect(dbconfig.url, {
useUnifiedTopology: true,
useNewUrlParser: true,
useCreateIndex: true,
useFindAndModify: false });
// Parse URL-encoded bodies (as sent by HTML forms)
app.use(express.urlencoded({extended: true}));
app.use(cookieParser('street'));
app.use(session({
secret: 'katsura street',
resave: true,
saveUninitialized: true,
proxy: true,
store: new MongoStore({ mongooseConnection: mongoose.connection },)
}));
app.use(passport.initialize());
app.use(passport.session());
我已经检查过 cookie 解析器在会话之上, 会话在通行证之前初始化。
我的 cors 会影响我本地的 reactapp 吗?而不是本地主机,我应该引用我本地计算机的外部 API?
反应方:
Axios.post(Config.ServerURL + 'auth/login',
{email: this.state.email, password: this.state.password},
{
withCredentials: true
}).then(result => {
console.log(result.data);
}).catch(error => {
//make sure message doesn't crash
if (error.response !== undefined) {
try {
console.log(error.response);
this.setState({message: error.response.data.info.message})
}catch(error) {
console.log(error);
}
}
});
查看headers看到cookies发送但是被过滤掉了,来到一篇文章:heroku blog
2019年后,Chrome等浏览器禁用跨域cookie以防止CSRF攻击
在我的用例中,我可以在节点 API 服务器上使用以下命令将其关闭:
app.use(session({
secret: 'street',
resave: true,
saveUninitialized: true,
proxy: true,
cookie: {
sameSite:'none',
secure:true
},
store: new MongoStore({ mongooseConnection: mongoose.connection },)
}));
将 samesite 更改为 none,将允许 chrome 使用跨域设置您的 cookie。
就我而言,它只是在会话设置中将 cookie.sameSite
设置为 "none"
,将 proxy
设置为 true
。