как использовать пользовательскую модель для django-graphql-auth

Я использую 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)

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_FIELDS или REGISTER_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",
    }
}

Другие вопросы по тегам