Fre*_*ors 5 session-cookies websocket express graphql apollo-server
我正在使用 Apollo Server 2(但这个问题不仅与 Apollo 相关)和 Express.js vanilla(与apollo-server-express)。
除了Express 会话机制外,所有内容也适用于订阅。
问题:
我正在使用cookie-session ( https://github.com/expressjs/cookie-session,但我认为这对于express-session中间件是一样的),当我的浏览器开始与我的服务器建立新连接时,ApolloServeronConnect钩子不会'没有req属性,也没有req.session等等......
我所能做的就是从分析该cookiewebSocket.upgradeReq.headers.cookie的onConnect生命周期挂钩,但它似乎对我很哈克。
编码:
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
Run Code Online (Sandbox Code Playgroud)
我在 Apollo Server Docs 站点上找不到任何内容(对于其他主题非常详细!)。
我哪里做错了?
请参阅 dougwilson 的此评论:https://github.com/expressjs/cookie-session/issues/117#issuecomment-452046225以获取会话值。
\n\n\n\n\n如果您只想获取会话内容(而不是写回新会话——无论如何,如果没有资源,这是不可能的),您可能直接使用 cookies 模块,这就是该模块在幕后使用的内容读取cookie并验证签名。一个可能的例子:
\n\nRun Code Online (Sandbox Code Playgroud)\nconst Cookies = require(\'cookies\')\n\n// \xe2\x80\xa6\n\nconst cookies = new Cookies(req, null, { keys }) const session =\nJSON.parse(Buffer.from(cookies.get(\'session\'),\'base64\').toString(\'utf8\'))\n
并onConnect返回您需要在 subscribe() 上使用的任何内容
| 归档时间: |
|
| 查看次数: |
1384 次 |
| 最近记录: |