将帐户身份验证方法从用户名更改为电子邮件
change account authenticate method from username to email
我想将登录方式从 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
我已经使用了上述解决方案,但对我不起作用。你能帮忙吗!!
那是因为django-allauth
与django-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
而不是 username
。像这样:
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'
我想将登录方式从 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
我已经使用了上述解决方案,但对我不起作用。你能帮忙吗!!
那是因为django-allauth
与django-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
而不是 username
。像这样:
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'