как использовать пользовательскую модель для django -graphql-auth - PullRequest
1 голос
/ 25 марта 2020

Я использую 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 Ответ

0 голосов
/ 26 марта 2020

Я автор пакета. Теперь на сайте документации есть пользовательская модель быстрого запуска, вы можете увидеть ее здесь . В настоящее время не документировано, как использовать его с пользовательской моделью пользователя, но это уже открытый вопрос, вы можете увидеть его здесь . Я вставлю тот же ответ, что и на 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",
    }
}

...