【问题标题】:how to use custom user model for django-graphql-auth如何为 django-graphql-auth 使用自定义用户模型
【发布时间】:2020-07-05 19:35:38
【问题描述】:

我在我的项目中使用 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)

【问题讨论】:

    标签: django authentication graphql django-graphql-jwt


    【解决方案1】:

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

    来自Django docs

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

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

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

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

    关注Django custom user model

    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"
    

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

    请参阅here 了解更多信息。

    # 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",
        }
    }
    
    

    【讨论】:

    • 在我的用户模型中,我想在注册新用户时将 mobile_no 作为输入以及电子邮件。我试图编辑您的包的代码,但无法实现输出。我是graphql的新手,如果您能帮助我,那就太好了。我在我的问题中添加了我的用户模型。
    • 我的自定义用户模型中没有“电子邮件”字段我可以不使用 graphql auth 吗?
    • 然后将用户名设置为电子邮件字段。
    猜你喜欢
    • 2021-05-07
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 2020-10-28
    • 2019-01-12
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多