使用 hapijs 前置功能限定 graphql 结果的范围
Scoping graphql results with hapijs pre functionality
我正在尝试根据用户的身份验证(在我的 header 中以令牌表示)进行预处理,以限定我的 apollo-server (graphql) 解析器结果的范围。我不确定这样做的最佳方法,这是我目前所拥有的:
// Graphql Options
const GraphqlOptions = {
schema: executableSchema,
debugging: true,
----> pre: [{ method: preMongoose, assign: 'm1'}],
context: {
user: Mongoose.model('User'),
SomethingElse: Mongoose.model('SomethingElse')
}
};
在我的 preMongoose 文件中
'use strict';
const preMongoose = (request, reply) => {
// code to modify mongoose model's pre to only return results based off
// request's auth token
};
module.exports = preMongoose;
好的,我找到了解决方案。它们使您能够拦截 server.register 选项中的请求。我是这样做的:
{
register: graphqlHapi,
options: {
path: '/graphql',
graphqlOptions: (request) => {
return new Promise((resolve, reject) => {
// a function that passes the scoping info in the response
getScopableData(request, (err, res) => {
if (err) {
return reject(err);
}
// add scoping data
GraphqlOptions.context.scopingOptions = res;
return resolve(GraphqlOptions);
});
});
}
}
您现在可以在编写解析器时在上下文中访问此字段。我不得不进入并修改解析器以仅查询符合我的范围标准的内容。
我正在尝试根据用户的身份验证(在我的 header 中以令牌表示)进行预处理,以限定我的 apollo-server (graphql) 解析器结果的范围。我不确定这样做的最佳方法,这是我目前所拥有的:
// Graphql Options
const GraphqlOptions = {
schema: executableSchema,
debugging: true,
----> pre: [{ method: preMongoose, assign: 'm1'}],
context: {
user: Mongoose.model('User'),
SomethingElse: Mongoose.model('SomethingElse')
}
};
在我的 preMongoose 文件中
'use strict';
const preMongoose = (request, reply) => {
// code to modify mongoose model's pre to only return results based off
// request's auth token
};
module.exports = preMongoose;
好的,我找到了解决方案。它们使您能够拦截 server.register 选项中的请求。我是这样做的:
{
register: graphqlHapi,
options: {
path: '/graphql',
graphqlOptions: (request) => {
return new Promise((resolve, reject) => {
// a function that passes the scoping info in the response
getScopableData(request, (err, res) => {
if (err) {
return reject(err);
}
// add scoping data
GraphqlOptions.context.scopingOptions = res;
return resolve(GraphqlOptions);
});
});
}
}
您现在可以在编写解析器时在上下文中访问此字段。我不得不进入并修改解析器以仅查询符合我的范围标准的内容。