공개 및 비공개 쿼리 및 변형이 혼합 된 GraphQL API가 있습니다. 사용자가 자신의 데이터를 수정할 수 있도록 권한이 검사기 및 사용자가 인증 된 작업이 필요한지 여부를 확인하는 방법을 찾고 있어요.Graphql 인증 확인을위한 미들웨어
resolver 함수의 네 번째 인수 인 info
에 작업의 이름을 반환하는 path.key
이 포함되어있는 것으로 나타났습니다 (문서 번호 : here).
내 솔루션과 같이, 모든 리졸버 내부 검사 기능을 추가했다 :
// modify user details
resolve: async (parent, args, { mongo: { User }, loggedUser }, info) => {
// auth check
authChecker(info.path.key, loggedUser, args.id);
// continue resolving
},
을 그리고 다른 파일 :
function authChecker(operationName, loggedUser, userId) {
if (PUBLIC_OPERATIONS.includes(operationName) {
// public operation
return true;
} else {
// private operation
if (args.id) {
// private operation that requires a permission check
...
} else {
// private operation that only requires user to be logged in
...
}
}
}
기능 true를 반환 또는 조건이있는 경우 오류가 발생하거나 충족되지 않았습니다.
이것이 괜찮은 해결책인지 또는 미들웨어로 해결할 수있는 방법이 있는지 궁금해서 모든 해결 자마다 코드를 반복하지 않아도됩니다. 문제는 미들웨어를 사용할 경우 작업 이름에 액세스 할 수 없다는 것입니다. 어떤 제안?
https://github.com/kriasoft/nodejs-api-starter/issues/78 –