[英]this attempt to set a cookie via set-cookie header was blocked
[英]Set-cookie in response header but not set in browser
我使用apollo-server-express
构建了一个GraphQL服务器,并在localhost:4000上运行它。
当我从GraphQL游乐场传递查询时,响应在标头中具有set-cookie,如下所示: 响应标头
但是在Chrome浏览器的“存储”>“ cookies”标签中,没有cookie。 chrome:应用程序>存储> cookie
这是我的server.ts。 (我认为我以正确的方式设置了我的cors
配置)
const server = new ApolloServer({
typeDefs,
resolvers,
introspection: true,
playground: true,
dataSources: () => ({
projectAPI: new ProjectAPI(),
}),
context: ({ req, res }: { req: Request; res: Response }) => ({ req, res }),
})
const app = express()
/* Parse cookie header and populate req.cookies */
app.use(cookieParser())
app.use(
cors({
origin: '*',
credentials: true, // <-- REQUIRED backend setting
})
)
app.use((req: any, res: any, next: any) => {
console.log(req.cookies)
next()
})
server.applyMiddleware({ app, path: '/' })
if (process.env.NODE_ENV !== 'test') {
app.listen({ port: 4000 }, () =>
console.log(`🚀 Server ready at http://localhost:4000${server.graphqlPath}`)
)
}
export { server }
这是我的resolvers.ts
:
export default {
Query: {
session: async (_: null | undefined, __: null | undefined, { res }: any) => {
const response = await fetch(`http://localhost:3000/api/v1/sessions/current_user`, {
headers: {
'content-type': 'application/json',
},
})
/** Get session cookie from the response header */
const sessionCookie = setCookie
.parse(response.headers.get('set-cookie') as string)
.find((el: any) => el.name === '_session')
/** If session cookie exists, save the cookie */
if (sessionCookie && res) {
const { name, value, ...rest } = sessionCookie
res.cookie(name, value, rest)
}
const data = await response.json()
return data.user
},
您是否在客户端使用apollo-client?
如果是这样,则在创建终止的http链接(或批处理链接等)时,需要添加credentials
选项。 如果不使用apollo-client,则只需要相应地添加此选项。
const OPTS = {
uri: GQL_BASE,
credentials: 'include', // or 'same-origin' etc.
includeExtensions: true,
}
const httpLink = new BatchHttpLink(OPTS)
您是正确的,您还需要credentials: true
在CORS选项中添加了credentials: true
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.