有这种突变
class AddStudentMutation(graphene.Mutation):
class Arguments:
input = StudentInputType()
student = graphene.Field(StudentType)
@classmethod
@staff_member_required
def mutate(cls, root, info, input):
try:
_student = Student.objects.create(**input)
except IntegrityError:
raise Exception("Student already created")
return AddStudentMutation(student=_student)在graphiql中执行上述突变之前,我添加请求头"Authorization": "JWT <token>",以便授权用户。但是我得到了错误graphql.error.located_error.GraphQLLocatedError: 'NoneType' object has no attribute 'fields'。当我移除标头时不会发生错误。当我将它包含在查询请求中时,它也可以正常工作。我做错了什么吗?我也需要授权才能发生突变。
我跟踪了回溯,它导致文件.../site-packages\graphql_jwt\middleware.py。它似乎是函数allow_any()第18行field = info.schema.get_type(operation_name).fields.get(info.field_name)中的包中的一个bug。新来的我需要帮助。
我用的是graphene-django==2.15.0和django-graphql-jwt==0.3.4
发布于 2022-02-28 14:42:48
allow_any函数随django-graphql-jwt而来,它期望以某种方式用于查询,而不是突变。因此,您可以通过添加本机allow_any块来覆盖try/except函数:
def allow_any(info, **kwargs):
try:
operation_name = get_operation_name(info.operation.operation).title()
operation_type = info.schema.get_type(operation_name)
if hasattr(operation_type, 'fields'):
field = operation_type.fields.get(info.field_name)
if field is None:
return False
else:
return False
graphene_type = getattr(field.type, "graphene_type", None)
return graphene_type is not None and issubclass(
graphene_type, tuple(jwt_settings.JWT_ALLOW_ANY_CLASSES)
)
except Exception as e:
return False在settings.py中,您必须添加覆盖的allow_any函数的路径:
GRAPHQL_JWT = {
'JWT_ALLOW_ANY_HANDLER': 'path.to.middleware.allow_any'
}我希望这能解决你的问题,因为它和我一起工作。
https://stackoverflow.com/questions/70896017
复制相似问题