Модуль GraphQL - запускать промежуточное ПО для всех операций, кроме общедоступных.
Я начал работать с модулями GraphQL , и они представляют концепцию промежуточного программного обеспечения, в котором вы можете применять на разных уровнях.
Я настроил промежуточное ПО для всего своего приложения, как это, чтобы требовать аутентификации:
export const modularApp = createApplication({
modules: [customerModule, premiumModule],
middlewares: {
"*": {
"*": [authMiddleware],
},
},
});
export function authMiddleware({ root, args, context, info }, next) {
if (context.authenticated) {
throw new AuthenticationError("Unauthorized");
}
return next();
}
Однако есть несколько запросов и изменений, которые я бы хотел обойти, потому что они общедоступны. Я думал, что добавление их на уровне модуля переопределит промежуточное ПО приложения:
export default createModule({
id: 'customer-module',
dirname: __dirname,
typeDefs,
resolvers,
middlewares: {
'Query': {
'somePublicOperation': [publicMiddleware],
}
},
});
export function publicMiddleware({ root, args, context, info }, next) {
// bypass authMiddleware
return next();
}
Вместо этого выполняются оба промежуточного программного обеспечения, поэтому я не могу найти решение этой проблемы.
Я мог бы добавить
authMiddleware
индивидуально для операций, но это не очень масштабируемо, поскольку для большинства операций требуется auth. Другая идея - создать отдельные модули для общедоступных / защищенных операций, но я не уверен, каково влияние на производительность, поскольку оба полагаются на одни и те же типы.