graphql - Apollo-server-express 内省已禁用,但仍然可以通过 websocket 连接
问题描述
我们使用 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
解决方案
ApolloServer在内部做的是阻止你使用__schema
和__type
解析器。我假设你可以做同样的事情:
export const resolvers = {
Query: {
__type() {
throw new Error('You cannot make introspection');
},
__schema() {
throw new Error('You cannot make introspection');
}
}
}
推荐阅读
- java - 将多个地图聚合到一个地图的优雅而高效的方式
- keras - 当我使用 load_model 加载 .h5 文件时,无法打开对象(错误的对象标头版本号)
- objective-c - 将 UIScrollView 中的未缩放视图缩放到边界
- google-apps-script - Google 表格:将文件夹范围导入主表格
- cloud-foundry - 在 cloudfoundry cli 中安装 stack-auditor 插件
- typescript - array.map 中缺少返回类型
- python-xarray - 多维xarray点插值
- python - 机器学习:整个班级的任务价值
- python - 如何使用任何字符匹配后跟可选匹配模式?
- javascript - 如何像谷歌日历模式一样打开模式,在完整日历中的当天点击事件