#typescript #graphql #nestjs #apollo #apollo-server
Вопрос:
У меня есть приложение GraphQL Nest, в котором у меня есть пользовательская директива аутентификации, которая проверяет, может ли поле быть извлечено ролью пользователя. Если этого не произойдет, это приведет к запрещенной ошибке.
Я также использовал useGlobalFilters
метод приложения nest для регистрации глобального обработчика исключений для ведения журнала, но функция не вызывается, когда эта директива выдает ошибку
Директива
export class AuthorizeDirective extends SchemaDirectiveVisitor {
visitFieldDefinition(field: GraphQLField<any, any>) {
const { resolve = defaultFieldResolver } = field;
field.resolve = async function(...args) {
const [, queryArgs, ctx ] = args;
let isAuthorized = false;
if (accessCheckClass) {
const instance: IAccessCheck = new AccessCheckClass();
const result = instance.checkAccess(queryArgs, ctx);
isAuthorized = resu<
if (result instanceof Promise) {
isAuthorized = await resu<
}
}
if (isAuthorized) {
return resolve.apply(this, args);
}
throw new ForbiddenError('Permission denied');
};
}
}
main.ts
app.useGlobalFilters(new AllExceptionsFilter()); --- AllExceptionsFilter.catch not getting called
Ошибка, выданная пользователю
{
"errors": [
{
"message": "permission denied",
"locations": [
{
"line": 2,
"column": 5
}
],
"path": [
""
],
"extensions": {
"code": "FORBIDDEN",
"exception": {
"stacktrace": [
]
}
}
}
],
"data": {
"data": null
}
}
Комментарии:
1. Как проявляются ошибки?
2. Добавили ошибку, выданную пользователю @JayMcDoniel