将帐户身份验证方法从用户名更改为emai

2024-04-26 23:46:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将登录方式从用户名更改为电子邮件

网址.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)
]

设置.py

ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_USERNAME_REQUIRED = False

我用过上述方法,但不适合我。你能帮忙吗


Tags: frompytokenresturl电子邮件方式required
1条回答
网友
1楼 · 发布于 2024-04-26 23:46:00

那是因为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

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

应用程序名称/型号.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

设置中。py:

AUTH_USER_MODEL = 'app_name.User'

相关问题 更多 >