在每个请求中,我发送令牌,并在快速中间件中进行检查
app.use(async (req, res, next) => {
const authorization = req.headers.authorization;
let token = null;
let user;
if (authorization) {
try {
token = jwt.verify(authorization, config.secret);
} catch (e) {
// dont work
throw new GraphQLError({ message: 'token damaged' });
}
if (token) {
const { _id } = token;
user = await User.findOne({ _id });
}
if (user) {
req.user = user;
}
}
next();
});
令牌可能已损坏,我会进行检查:
try {
token = jwt.verify(authorization, config.secret);
} catch (e) {
throw new GraphQLError({ message: 'token damaged' });
}
所以我需要发送到客户端应用程序Express Error,但它没有按预期工作, 是否有任何选项可以创建graphql中间件,在调用每个解析器之前接受请求参数?现在如果我想要丢失损坏令牌的错误,我需要在每个解析器中写入检查吗?
答案 0 :(得分:0)
您可以简单地回复并返回,而无需调用下一个中间件:
try {
token = jwt.verify(authorization, config.secret);
} catch (e) {
res.statusCode = 401;
return res.end('{"errors": [{"message": "token damaged"}]}');
}