【发布时间】:2019-04-01 01:02:00
【问题描述】:
我正在开发一个用户登录/注册功能,作为一个更大项目的一部分,并且正在使用 localhost(apollo 服务器和 react apollo 前端)。我正在使用 express-session 进行会话。
提交登录时,我可以看到响应标头中有 set-cookie,但它没有在 Application->Cookies 中设置。
我尝试了不同的浏览器,使用 createHttpLink、apollo-boost,并使用 include & same-origin(使用 same-origin)。
我已经尝试让它工作 2 周了,但已经没有东西可以尝试了,这是我最后的选择!我知道这将是一件非常微不足道的事情,但我就是看不到。
如果我使用 GraphqL Playground 并更改设置以包含凭据,我可以看到那里设置了 cookie。
服务器在 localhost:8080/graphql 上运行 客户端在 localhost:3000 上运行
客户:
const client = new ApolloClient({
link: new HttpLink({
uri: 'http://localhost:8080/graphql',
credentials: 'same-origin',
}),
cache: new InMemoryCache()
});
科斯:
app.use(
cors({
origin: 'http://localhost:3000',
credentials: true
})
);
快速会话:
app.use(
session({
name: "sess",
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false,
cookie: {
httpOnly: true,
secure: false,
maxAge: 1000 * 60 * 60 * 24 * 7,
},
})
);
响应 Cookie:
HTTP/1.1 200 OK
X-Powered-By: Express
Access-Control-Allow-Origin: *
Vary: Origin
Access-Control-Allow-Credentials: true
Content-Type: application/json
Content-Length: 69
set-cookie: sess=s%3AAZXnGb5BVc1aAOwH6zBNiT8mB6Ebf75k.in%2BPU1OvxymDPdPIZBf8%2FQzrRmM0S04tXFzXDwYCnk8; Path=/; Expires=Sat, 03 Nov 2018 13:59:57 GMT; HttpOnly
Date: Sat, 27 Oct 2018 13:59:57 GMT
Connection: keep-alive
【问题讨论】:
-
Localhost:3000 和 localhost:8080 不是同源,因此它们不能使用凭据共享 cookie:same-origin。
-
当我尝试使用 include 时出现多个 CORS 策略错误:“响应中的 'Access-Control-Allow-Origin' 标头的值不能是通配符 '*' 时请求的凭据模式为“包含”。”或“预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段内容类型。”
标签: reactjs cookies graphql apollo express-session