Apollo-server-express 内省已禁用,但仍然可以通过 websocket 连接
Posted
技术标签:
【中文标题】Apollo-server-express 内省已禁用,但仍然可以通过 websocket 连接【英文标题】:Apollo-server-express introspection disabled but still possible over websocket connections 【发布时间】:2020-10-22 17:29:03 【问题描述】:我们使用 apollo-server-express 来公开一个 graphql 服务器。
对于这个服务器,我们已将自省变量设置为 false 以向外部世界隐藏我们的模式,这对于通过 rest 调用的 Graphql 调用非常有效。
但是,当我们与同一台服务器建立 websocket 连接时,我们设法执行自省查询,即使在阿波罗服务器实例化期间,自省被显式设置为 false
启动 Apollo 服务器的配置如下所示:
schema: <schema>,
context: <context_function>,
formatError: <format_error_function>,
debug: false,
tracing: false,
subscriptions:
path: <graphQl_path>,
keepAlive: <keep_alive_param>,
onConnect: <connect_function>,
onDisconnect: <disconnect_function>
,
introspection: false,
playground: false
;
有人遇到过类似的问题吗?如果是,你能解决它吗?如何解决?
apollo-server-express 版本 = 2.1.0
npm 版本 = 6.4.1
节点版本 = 10.13.0
【问题讨论】:
【参考方案1】:ApolloServer does internally 阻止您使用 __schema
和 __type
解析器。我假设你可以做同样的事情:
export const resolvers =
Query:
__type()
throw new Error('You cannot make introspection');
,
__schema()
throw new Error('You cannot make introspection');
【讨论】:
以上是关于Apollo-server-express 内省已禁用,但仍然可以通过 websocket 连接的主要内容,如果未能解决你的问题,请参考以下文章
apollo-server-express:如何解决内部订阅问题?
升级到 apollo-server-express 2.0.0 缺少上下文
是否可以将 apollo-server-express 部署到 lambda?