【发布时间】:2019-02-16 05:27:41
【问题描述】:
我正在使用 Apollo Server 2(但这个问题不仅仅存在于 Apollo)和 Express.js vanilla(使用 apollo-server-express)。
除了 Express session 机制之外,Subscriptions 也一切正常。
问题:
我正在使用 cookie-session(https://github.com/expressjs/cookie-session,但我认为对于 express-session 中间件也是如此)并且当我的浏览器启动新连接时对于我的服务器,ApolloServer onConnect 钩子没有 req 属性,也没有 req.session 等等......
我能做的是在webSocket.upgradeReq.headers.cookie 生命周期钩子中解析来自webSocket.upgradeReq.headers.cookie 的cookie,但在我看来这很hacky。
代码:
const { ApolloServer } = require('apollo-server-express')
const typeDefs = require('../src/graphql/types')
const resolvers = require('../src/graphql/resolvers')
const models = require('../src/models')
const apolloServer = new ApolloServer({
typeDefs,
resolvers,
context: ({ req, connection }) => {
// connection exists only on webSocket connection
if (connection) {
return {
currentUser: connection.context.currentUser // <-- I NEED THIS!
}
}
// if not a (webSocket) connection it is a "default" HTTP call
return {
models,
currentUser: { id: req.user.id }
}
},
subscriptions: {
onConnect: (connectionParams, webSocket) => {
// "connectionParams" is from the client but I cannot use it because cookies are HTTP-Only
// I can retrieve cookies from here: "webSocket.upgradeReq.headers.cookie" but then I need to parse them which seems a bit hacky to me
// return { currentUser: req.user.id } // <-- I NEED THIS (req.user.id doesn't exists)!
}
}
})
module.exports = apolloServer
我在 Apollo Server Docs 网站上找不到任何内容(对于其他主题非常有据可查!)。
我哪里做错了?
【问题讨论】:
-
你是怎么解决的?
标签: express websocket graphql session-cookies apollo-server