【发布时间】:2018-10-19 14:26:21
【问题描述】:
有人可以帮助我了解如何在 graphQL lambda 应用程序中引发身份验证错误吗?我将graphQL-yoga与无服务器一起使用,我可以对请求进行身份验证,然后返回我从jwt获得的用户,{} 没有令牌,或者如果令牌旧,则抛出身份验证错误。当我抛出一个错误时,它会被我的身份验证块的 catch 语句捕获,但我不知道如何从 lambda 中实际返回它。
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);
}
};
【问题讨论】:
标签: lambda graphql serverless apollo-server