gpt4 book ai didi

django - Django 用户模型中的多个 USERNAME_FIELD

转载 作者:行者123 更新时间:2023-12-04 05:03:04 27 4
gpt4 key购买 nike

我的自定义用户模型:

class MyUser(AbstractBaseUser):
username = models.CharField(unique=True,max_length=30)
email = models.EmailField(unique=True,max_length=75)
is_staff = models.IntegerField(default=False)
is_active = models.IntegerField(default=False)
date_joined = models.DateTimeField(default=None)

# Use default usermanager
objects = UserManager()

USERNAME_FIELD = 'email'

有没有办法指定多个 USERNAME_FIELD ?类似 ['email','username']以便用户可以通过电子邮件和用户名登录?

最佳答案

USERNAME_FIELD设置不支持列表。您可以创建一个 custom authentication backend尝试在“电子邮件”或“用户名”字段中查找用户。

from django.db.models import Q

from django.contrib.auth import get_user_model

MyUser = get_user_model()

class UsernameOrEmailBackend(object):
def authenticate(self, username=None, password=None, **kwargs):
try:
# Try to fetch the user by searching the username or email field
user = MyUser.objects.get(Q(username=username)|Q(email=username))
if user.check_password(password):
return user
except MyUser.DoesNotExist:
# Run the default password hasher once to reduce the timing
# difference between an existing and a non-existing user (#20760).
MyUser().set_password(password)

然后,在您的 settings.py套装 AUTHENTICATION_BACKENDS到您的身份验证后端:
 AUTHENTICATION_BACKENDS = ('path.to.UsernameOrEmailBackend,)\

请注意,此解决方案并不完美。例如,密码重置仅适用于 USERNAME_FIELD 中指定的字段。环境。

关于django - Django 用户模型中的多个 USERNAME_FIELD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31370118/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com