【发布时间】:2021-10-15 03:26:26
【问题描述】:
我正在尝试集成一些自定义指令以检查我的应用程序中的访问权限
我尝试了很多方法来实现 apolloGrapql 自定义指令,但我总是遇到同样的问题,我无法从指令访问我的上下文函数
=> 我有什么
...imports
// graphql server
async function startApolloServer () {
class HasRole extends SchemaDirectiveVisitor {
visitObject (type) {
this.ensureFieldsWrapped(type)
type._requiredAuthRole = this.args.requires
}
visitFieldDefinition (field, details) {
this.ensureFieldsWrapped(details.objectType)
field._requiredAuthRole = this.args.requires
}
ensureFieldsWrapped (objectType) {
const fields = objectType.getFields()
Object.keys(fields).forEach(fieldName => {
field.resolve = async function (...args) {
console.log('context please', args[2])
// return {}
// can't access decodedToken()
}
})
}
}
const app = express()
const server = new ApolloServer({
schema: makeExecutableSchema({
typeDefs,
resolvers,
context: ({ req, res, next }) => {
return {
decodedToken: () => {
return getUser(req)
}
}
},
schemaDirectives: {
hasRole: HasRole
}
})
})
await server.start()
server.applyMiddleware({ app })
await new Promise(resolve => app.listen({ port: process.env.PORT }, resolve))
console.log(`???? Server ready at http://localhost:${process.env.PORT}${server.graphqlPath}`)
enableApiControllers(app)
return { server, app }
}
startApolloServer()
【问题讨论】:
标签: node.js graphql apollo apollo-server