3

我在我的项目中使用 graphql 并希望在注册时生成令牌。尽管 django-graphql-auth 具有所有书面变异,但它使用不同的用户模型。但我想使用我的自定义用户模型。我该怎么办?这是我的用户模型

class CustomUser(AbstractUser):
"""
Customized User Model
"""
email = models.EmailField(blank=True, null=True,
                          max_length=256, unique=True)
mobile_no = models.CharField(
    max_length=20, blank=True, null=True, unique=True)
verification_code = models.CharField(max_length=6)
code_valid_till = models.DateTimeField(blank=True, null=True)

timezone = models.CharField(max_length=40, blank=True, null=True)
country = models.CharField(max_length=20, default='BD', choices=COUNTRIES)

pin_verified = models.BooleanField(default=False)
email_verified = models.BooleanField(default=False)

modified_on = models.DateTimeField('date modified', auto_now=True)
created_on = models.DateTimeField(auto_now_add=True)

# For password reset
reset_verification_code = models.CharField(
    max_length=6, blank=True, null=True)
reset_code_valid_till = models.DateTimeField(blank=True, null=True)
reset_request = models.BooleanField(default=False)
reset_valid_till = models.DateTimeField(blank=True, null=True)

class Meta:
    verbose_name_plural = "User"

def __str__(self):
    if not self.is_anonymous:
        return "{} - {}".format(self.mobile_no, self.email)
    else:
        return "Anon"

@property
def get_full_name(self):
    return super().get_full_name()

def get_all_permissions(self, obj=None):
    return super().get_all_permissions(obj=obj)

def send_email(self, subject, message, to_email: list, from_email=None, **kwargs):
    send_mail_to_user(subject, message, from_email, to_email, **kwargs)
4

1 回答 1

1

我是包的作者。现在文档站点在快速入门中有一个自定义用户模型,您可以在此处查看目前,没有记录如何将它与自定义用户模型一起使用,但它已经是一个未解决的问题,您可以在此处查看。我将粘贴与 Github 上相同的答案。

来自Django 文档

在项目中更改为自定义用户模型

在创建数据库表之后更改 AUTH_USER_MODEL 要困难得多,因为它会影响例如外键和多对多关系。

因此,请确保在开始项目时创建自定义用户模型。

将以下内容添加到您的自定义用户模型中

遵循Django 自定义用户模型

from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    # ...
    USERNAME_FIELD = "<username_filed_name>" # e.g: "username", "email"
    EMAIL_FIELD = "<email_field_name>" # e.g: "email", "primary_email"

在设置中添加您的自定义用户模型

请参阅此处了解更多信息。

# settings.py

AUTH_USER_MODEL = 'myapp.CustomUser'

如果您还有其他问题,请告诉我:)


编辑:mobile_no在注册中添加

使用REGISTER_MUTATION_FIELDSREGISTER_MUTATION_FIELDS_OPTIONAL

# settings.py


GRAPHQL_AUTH = {
    # ...

    REGISTER_MUTATION_FIELDS = [
        # ...
        'mobile_no'
    ]

    # or
    REGISTER_MUTATION_FIELDS_OPTIONAL = ['mobile_no']

    # You can set the graphene base scalars:
    REGISTER_MUTATION_FIELDS = {
        "email": "String",
        "username": "String",
        "mobile_no": "String",
    }
}

于 2020-03-25T22:18:18.683 回答