Django Graphql Auth突变突发报错:意外关键字参数'refresh_token'求助
解决方案
1. 检查字段名匹配问题
默认django-graphql-auth的Register突变返回字段是refresh_token(下划线命名),你查询里用的是驼峰式refreshToken。先试试把查询里的refreshToken改成refresh_token测试:
mutation Register { register( email: "appleorange@gmail.com" password1: "Abcd@2023" password2: "Abcd@2023" ) { success errors refresh_token token } }
如果能成功,说明是字段名格式不匹配。要保留驼峰查询的话,就在schema里给字段加别名:
from graphene import String, ObjectType, Field from graphql_auth.types import RegisterOutput class RegisterResponse(ObjectType): success = Field(Boolean) errors = Field(String) token = String() refreshToken = String(source="refresh_token") # 把下划线字段映射成驼峰别名 # 自定义突变返回这个类型 class CustomRegister(RegisterMutation): class Meta: output_field = RegisterResponse
2. 检查自定义Register突变的代码
如果你自己写了CustomRegister类,别在__init__方法里加refresh_token参数——父类RegisterMutation的初始化方法根本不接收这个参数,加了就会报你遇到的错。比如下面这种写法要改:
# 错误写法 class CustomRegister(RegisterMutation): def __init__(self, *args, refresh_token=None, **kwargs): super().__init__(*args, **kwargs) # 正确写法 class CustomRegister(RegisterMutation): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs)
3. 彻底清理依赖重装
换版本没解决的话,大概率是缓存残留。执行以下命令彻底清理后重装指定版本:
pip uninstall django-graphql-jwt django-graphql-auth PyJWT -y pip cache purge # 用已知兼容的版本组合,比如: pip install django-graphql-jwt==0.3.4 django-graphql-auth==0.4.0 PyJWT==2.7.0
4. 验证配置正确性
检查settings.py里的配置有没有问题,确保这几个库的配置都到位:
INSTALLED_APPS = [ # 其他应用... 'graphql_jwt', 'graphql_auth', ] GRAPHQL_JWT = { "JWT_VERIFY_EXPIRATION": True, "JWT_LONG_RUNNING_REFRESH_TOKEN": True, } AUTHENTICATION_BACKENDS = [ 'graphql_auth.backends.GraphQLAuthBackend', 'django.contrib.auth.backends.ModelBackend', ]
内容的提问来源于stack exchange,提问作者Kalpesh Tawde
相关产品推荐
相关产品推荐

