当我使用REST api时,我曾经将用户放置在req.user上,但是现在我正在做我的第一个graphql auth,并且我很难将用户放置在上下文对象上。
这是我要完成的工作,但不起作用:
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) }),
});
值admin
的context
是Promise { <pending> }
上下文函数本身可以返回承诺。您可以使函数异步,也可以使用链接API:
import { validateAccessToken } from './auth';
const server = new ApolloServer({
modules: [auth],
context: async ({ req, res }) => ({ req, res, admin: await validateAccessToken(req) }),
});
const server = new ApolloServer({
modules: [auth],
context: ({ req, res }) =>
validateAccessToken(req).then(admin => ({ req, res, admin })),
});
现在,管理员应该成为上下文的一部分,而不再是未完成的承诺。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句