【问题标题】:change account authenticate method from username to email将帐户身份验证方法从用户名更改为电子邮件
【发布时间】:2019-10-15 19:14:24
【问题描述】:

我想将登录方式从 username 更改为 email

urls.py

from rest_framework_jwt.views import obtain_jwt_token,refresh_jwt_token

urlpatterns = [
    url(r'^login/$', obtain_jwt_token),
    url(r'^tokenRefresh/', refresh_jwt_token)
]

setting.py

ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_USERNAME_REQUIRED = False

我使用了上述解决方案,但不适合我。你能帮忙吗!

【问题讨论】:

    标签: python django django-rest-framework django-rest-framework-jwt


    【解决方案1】:

    那是因为django-allauthdjango-rest-framework-jwt 无关。你在settings.py 中设置的设置属于django-allauth,所以如果你想使用这些设置,那么你应该使用django-allauth 视图。

    使用django-rest-framework-jwt 视图,我查看了obtain_jwt_token 视图,发现他们使用get_user_model().USERNAME_FIELD 来获取用户名字段。

    from django.contrib.auth import get_user_model
    
    def get_username_field():
        try:
            username_field = get_user_model().USERNAME_FIELD
        except AttributeError:
            username_field = 'username'
    
        return username_field
    

    因此,如果您想将用户名字段更改为另一个,您可以创建一个自定义 User 模型,然后将 USERNAME_FIELD 的值设置为 email 以允许用户通过 email 而不是 @987654334 登录@。像这样:

    app_name/models.py

    from django.contrib.auth.models import AbstractUser
    from django.db import models
    
    class User(AbstractUser):
        USERNAME_FIELD = 'email'
    
        def __str__(self):
            return self.email
    

    在您的 settings.py:

    AUTH_USER_MODEL = 'app_name.User'
    

    【讨论】:

      猜你喜欢
      • 2020-07-13
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 2015-11-06
      • 1970-01-01
      • 2015-03-13
      相关资源
      最近更新 更多