Javascript 如何在apollo server中将用户添加到上下文对象?
当我使用RESTAPI时,我曾经将用户放在req.user上,但现在我正在做我的第一个graphql验证,我很难将用户放在上下文对象上 以下是我试图完成但不起作用的目标:Javascript 如何在apollo server中将用户添加到上下文对象?,javascript,node.js,authentication,graphql,apollo-server,Javascript,Node.js,Authentication,Graphql,Apollo Server,当我使用RESTAPI时,我曾经将用户放在req.user上,但现在我正在做我的第一个graphql验证,我很难将用户放在上下文对象上 以下是我试图完成但不起作用的目标: 从令牌获取管理员ID并从数据库获取管理员 将获取的管理员添加到上下文对象,以便我可以在每个解析器之前检查管理员权限 context中的admin的值是Promise{}上下文函数本身可以返回一个Promise。您可以使函数异步或使用链接API: 从“/auth”导入{validateAccessToken}; const se
context
中的admin
的值是Promise{}
上下文函数本身可以返回一个Promise。您可以使函数异步或使用链接API:
从“/auth”导入{validateAccessToken};
const server=新服务器({
模块:[auth],
上下文:async({req,res})=>({req,res,admin:await validateAccessToken(req)}),
});
const server=新服务器({
模块:[auth],
上下文:({req,res})=>
validateAccessToken(req).then(admin=>({req,res,admin})),
});
现在,admin应该是上下文的一部分,不再是一个待定的承诺
export const validateAccessToken = async (req) => {
try {
const accessToken = req.headers.authorization.slice(7);
if (!accessToken) throw new AuthenticationError('Unauthorized access');
const { id } = verify(accessToken, process.env.JWT_ACCESS_SECRET);
const admin = await Admin.findById(id);
return admin;
} catch {
return null;
}
};
// index.js
import { validateAccessToken } from './auth';
const server = new ApolloServer({
modules: [auth],
context: ({ req, res }) => ({ req, res, admin: validateAccessToken(req) }),
});