【发布时间】:2021-03-17 11:05:12
【问题描述】:
我有一个简单的社交媒体应用程序,它使用:GraphQL 和 ApolloServer 作为后端,用户可以在其中点赞帖子。但是当未登录的用户尝试点赞按钮时会出现错误,并出现一个名为:
未处理的拒绝(错误):GraphQL 错误:必须提供授权标头
发生。
这是 likePost 变异的代码...
async likePost(_, { postId }, context) {
const { username } = checkAuth(context);
const post = await Post.findById(postId);
if (post) {
if (post.likes.find((like) => like.username === username)) {
post.likes = post.likes.filter((like) => like.username !== username);
} else {
post.likes.push({
username,
createdAt: new Date().toISOString()
});
}
await post.save();
return post;
} else throw new UserInputError('Post not found');
}
},
这是检查授权文件的代码。
const { AuthenticationError } = require('apollo-server');
const jwt = require('jsonwebtoken');
const { SECRET_KEY } = require('../config');
module.exports = (context) => {
// context = { ... headers }
const authHeader = context.req.headers.authorization;
if (authHeader) {
// Bearer ....
const token = authHeader.split('Bearer ')[1];
if (token) {
try {
const user = jwt.verify(token, SECRET_KEY);
return user;
} catch (err) {
throw new AuthenticationError('Invalid/Expired token');
}
}
throw new Error("Authentication token must be 'Bearer [token]");
}
throw new Error('必须提供授权标头'); };
我该如何解决这个问题,以便在未注册用户尝试点赞帖子时不会出现错误?
【问题讨论】:
标签: javascript reactjs authentication graphql react-apollo