【发布时间】:2019-05-28 23:53:38
【问题描述】:
我正在尝试为我正在处理的项目设置 Apollo 后端,我正在尝试实现架构指令。但是,我无法将我的模式指令添加到突变中。所以我的主要问题是:如何为突变实现 auth 指令?
我已将@auth(requires: ADMIN) 添加到我的用户查询末尾,它工作正常。然后,Apollo 将需要一个具有管理员访问权限的不记名令牌来执行用户查询。
extend type Query {
user(id: ID!): User
users: [User!]! @auth(requires: ADMIN)
}
当我尝试以相同的方式对 editMyUser 突变执行此操作时,似乎对所有突变都强制执行了 auth 指令,而不仅仅是我想要的那个。当我将 @auth 部分添加到 editMyUser 突变时,即使 signUp 突变也会给出“未授权”错误。尽管它们之间没有任何关系。
调用时应该传递给auth指令的角色字段是空的。
extend type Mutation {
signUp(
username: String!
firstName: String
lastName: String
password: String!
isAdmin: Boolean
isActive: Boolean): User!
login(
username: String!
password: String!): User!
editMyUser(
id: ID!
firstName: String
lastName: String
password: String): User! @auth(requires: USER)
adminEditUser(
id: ID!
firstName: String
lastName: String
password: String
isActive: Boolean
isAdmin: Boolean
isBanned: Boolean): User!
}
这就是我实现架构指令的方式
export default gql`
directive @auth(requires: Role = ADMIN) on OBJECT | FIELD_DEFINITION
enum Role {
ADMIN
USER
}
https://github.com/jwhenshaw/graphql-directives-auth 这是我在代码中实现的 Auth 指令以供参考。
总而言之,当我为突变实施 auth 指令时,它们会为所有突变实施,而不仅仅是一个突变,而且它甚至无法正常工作,因为角色没有传递给指令。
我很想在这方面得到一些帮助。谢谢!
【问题讨论】:
标签: javascript authentication graphql apollo apollo-server