Может кто-нибудь помочь мне понять, как генерировать ошибки аутентификации в лямбда-приложении graphQL? Я использую GraphQL-йогу с безсерверным сервером, и я могу аутентифицировать запрос и либо вернуть пользователя, которого я получил от jwt, {}
без токена, либо выдать ошибку аутентификации, если токен старый. Когда я выбрасываю ошибку, она попадает в оператор catch моего блока authenticate, но я понятия не имею, как на самом деле вернуть его из лямбды.
const lambda = new GraphQLServerLambda({
typeDefs,
context: ({ event, context }) =>
authenticate(event.headers.Authorization)
.then(user => ({ db: mainDb, user}))
.catch(e => {
console.log('Caught the auth error here');
throw e;
}),
Query: { \\ some queries here.... },
Mutation: { \\ some mutations here...}
});
Как я могу либо отформатировать ошибку, либо выбросить ее из нужного места, чтобы получить реальную отформатированную ошибку? Вместо этого я получаю Unexpected token I in JSON...
ошибку в клиенте. Ясно, что мне нужно сделать какое-то форматирование во время моего throw
, но для меня не совсем очевидно, как это сделать.
Если это полезно, здесь, в моей части экспорта. Я пробую все, от try / catch до then / catch, и на данный момент я, похоже, уже скучаю по отлову ошибки. Есть ли лучший способ сделать это? Главное, что мне нужно, это возможность аутентификации, отклонения неверных токенов и в противном случае просто вернуть {}
для не авторизованного пользователя. Я испытываю трудности с поиском пользовательских авторизаторов, позволяющих не входить в систему пользователям, поэтому я делаю авторизацию непосредственно в моей конечной точке graphQL
exports.server = (event, context, callback) => {
try {
return lambda
.graphqlHandler(event, context, callback)
.then(b => b)
.catch(e => console.log(`can't catch it here ${e}`));
} catch (e) {
console.log('or here');
callback(e);
}
};