簡體   English   中英

不使用 user = models.OneToOneField(User,on_delete=models.CASCADE)

[英]Not using user = models.OneToOneField(User,on_delete=models.CASCADE)

我正在創建只需要電子郵件和密碼的注冊、登錄、注銷。 當我使用 user = models.OneToOneField(User,on_delete=models.CASCADE) 時,它給了我一個錯誤,因為它也需要用戶名。 如何僅從用戶獲取電子郵件和密碼並將其保存給用戶?

您可以使用

AUTHENTICATION_BACKENDS = ('path_to_file.EmailAuthBackend', 'django.contrib.auth.backends.ModelBackend',)

在設置中

和后端文件:

from django.contrib.auth.backends import ModelBackend
from django.contrib.auth import get_user_model
from django.contrib.auth.hashers import check_password
from django.contrib.auth.models import User

class EmailAuthBackend(object):

    @staticmethod
    def authenticate(self, username="", password="", **kwargs):
        user_model = get_user_model()

        try:
            user = user_model.objects.get(email=username)
            if check_password(password, user.password):
                return user
            else:
                return None
        except user_model.DoesNotExist:
            return None

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

並在您的模型中添加獨特的電子郵件規則

from django.contrib.auth.models import User    
User._meta.get_field('email')._unique = True

暫無
暫無

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

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