簡體   English   中英

如何在Django的UserCreationForm / User Model中將客戶的電子郵件作為用戶名?

[英]How to make customer's email as the username in UserCreationForm / User Model in Django?

我在Django中使用UserModel和UserCreationForm。 但是,我不需要用戶名,而是要使用客戶的電子郵件作為登錄信息(即完全繞過/忽略用戶名字段)。

  1. 如何使用戶名字段在用戶模型中為可選
  2. 如何將電子郵件轉換為客戶的“用戶名”? 反過來,我該如何使該電子郵件字段為必填字段?

1.)只需在您的表單中使用戶名字段為可選,然后從電子郵件中刪除“ @”,然后向模型傳遞電子郵件作為用戶名。

2)創建一個自定義身份驗證后端(它將接受用戶名或電子郵件):

from django.contrib.auth.models import User

class EmailOrUsernameModelBackend(object):
    def authenticate(self, username=None, password=None):
        if '@' in username:
            kwargs = {'email': username}
        else:
            kwargs = {'username': username}
        try:
            user = User.objects.get(**kwargs)
            if user.check_password(password):
                return user
        except User.DoesNotExist:
            return None

    def get_user(self, user_id):
        try:
            return User.objects.get(pk=user_id)
        except User.DoesNotExist:
            return None

相應地更改您的設置:

AUTHENTICATION_BACKENDS = (
    'myoursite.backends.EmailOrUsernameBackend', # Custom Authentication to accept usernamee or email
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM