Daw*_*ski 4 javascript express graphql
我已经开始在我的快递js项目中使用graphql,但我想知道如何保护我的一些GraphQL查询.以前我使用护照js(JWT),这很好用.安全路线真的很容易但是使用graphql(express-graphql)我找不到任何解决方案.此外,拥有某种基于角色的解决方案来保护特定领域将会很不错.有没有什么好的教程如何保护graphQL?
小智 5
我目前正在评估对具有 express、passport 和 jwt 的解析器进行授权的潜力。它没有经过全面测试,但可以正常工作。
为此,您至少需要在上下文中传递请求:
const graphql = graphqlExpress((req, res) => {
return ({
schema,
rootValue: resolver,
// For query authorization. Ideally, Passport will handle all requests and authenticate
// each one for the current user. The queries will fetch data exclusively related to that user.
context: { req, res },
});
});
// The api
app.use('/api', graphql);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我承诺了护照认证:
const auth = (req, res) => new Promise((resolve, reject) => {
passport.authenticate('jwt', { session: false }, (err, user) => {
if (err) reject(err);
if (user) resolve(user);
else reject('Unauthorized');
})(req, res);
});
const resolver = {
users: (root, ctx) => auth(ctx.req, ctx.res)
.then(() => User.find({}, (err, res) => res))
.catch((err) => {
throw new Error(err);
}),
};
Run Code Online (Sandbox Code Playgroud)
由于关于如何涵盖这一点的示例并不多,我一直在努力使其变得简单,但我认为我做得很好。
以下是我用来达到这一点的资源: