bounty将在7天后过期。回答此问题可获得+50的声望奖励。Homunculus Reticulli正在寻找标准答案。
我使用的是Django 3.2版和django-graphql-auth 0.3.16版
我定义了一个自定义用户(和用户管理器),如下所示:
第1001章:我的models.py
class CustomUser(AbstractUser):
USERNAME_FIELD='username'
EMAIL_FIELD='email'
# ...
objects = CustomUserManager()
第1001章:我的managers.py
class CustomUserManager(BaseUserManager):
# ...
def create_user(self, email, password, **extra_fields):
if not is_valid_email(email):
raise ValueError(_('Bad email'))
username = extra_fields.get('username')
if not is_acceptable_username(username)):
raise ValueError(_('You cannot use this username'))
user = self.model(email=email, **extra_fields)
user.set_password(password)
user.save()
return user
def create_superuser(self, email, password, **extra_fields):
"""
Create and save a SuperUser with the given email and password.
"""
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
extra_fields.setdefault('is_active', True)
if extra_fields.get('is_staff') is not True:
raise ValueError(_('Superuser must have is_staff=True.'))
if extra_fields.get('is_superuser') is not True:
raise ValueError(_('Superuser must have is_superuser=True.'))
return self.create_user(email, password, **extra_fields)
第1001章:我的settings.py
# ....
AUTH_USER_MODEL='myapp.CustomUser'
第1001章:我的schema.py
import graphene
from graphql_auth import mutations
from graphql_auth.schema import MeQuery, UserQuery
class AuthMutation(graphene.ObjectType):
register = mutations.Register.Field()
verify_account = mutations.VerifyAccount.Field()
class Query(UserQuery, MeQuery, graphene.ObjectType):
pass
class Mutation(AuthMutation, graphene.ObjectType):
pass
schema = graphene.Schema(query=Query, mutation=Mutation)
我尝试通过以下变异注册一个新用户:
mutation {
register(
email: "memyself@somebad-domain.com",
username: "badword1",
password1: "1234",
password2: "1234"
) {
success
errors
token
}
}
我得到了以下回应:
{
"data": {
"register": {
"success": true,
"errors": null,
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImJhZHdvcmQxIiwiZXhwIjoxNjY5OTEzNDIzLCJvcmlnSWF0IjoxNjY5OTEzMTIzfQ.TZ-copVrhUUsuLpozi18THjprGMnAGsBwpnyWORc16M"
}
}
}
预期的结果是GraphQL变异将根据电子邮件、用户名和密码返回一个失败代码-所有这些都被故意指定为被拒绝。
为什么django-graphql-auth不使用我的自定义管理器来创建对象-我该如何修复它,以便我可以实现自己的验证(例如,正确地检查/验证用户名和电子邮件)?
1条答案
按热度按时间hfyxw5xn1#
看起来您已经定义了自己的CustomUser模型和CustomUserManager,但是您没有在www.example.com文件中使用它们schema.py。为了使用您的自定义用户模型和管理器,您需要在schema.py文件中创建AuthMutation类时指定它们。
以下示例说明了如何在创建AuthMutation类时指定自定义用户模型和管理器:
通过在创建AuthMutation类时指定自定义的用户模型和管理器,django-graphql-auth将在处理register变量时使用您自定义的create_user和create_superuser方法的实现。这将允许在创建新用户时应用您自定义的验证。
我希望这对你有帮助!如果你有任何其他问题,请告诉我。