Как реализовать пользовательское хэширование паролей в Django?

Мой менеджер попросил меня реализовать Base64 шифрование паролей для нашего django сайта. Я не могу найти никакого алгоритма хэширования base64 в django.contrib.auth.hashers. Поэтому я решил, что мне придется написать свой собственный модуль Hasher. Проблема в том, что я не знаю как. Я пытался читать документацию django, но она все еще неясна для меня. Мне просто нужно, чтобы пароли моих пользователей хранились в базе данных с использованием Base64 шифрования. Также мне нужно, чтобы моя пользовательская аутентификация работала соответственно.

Вот моя модель пользователя:

from django.contrib.auth.models import AbstractUser
from .managers import UserManager

class User( AbstractUser ) : 

    email = models.EmailField( verbose_name = 'Email Address', unique = True, null = False )
    username = None

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []
    objects = UserManager()

    def __str__( self ) : return self.get_username()


Вот мой менеджер пользователей:

from django.contrib.auth.models import BaseUserManager

class UserManager( BaseUserManager ) : 

    def create_user( self, email = None, password = None, first_name = None, last_name = None ) :
        
        try : 

            user = self.model( email = self.normalize_email( email ) )
            user.set_password( password )
            user.is_active = True

            user.first_name = first_name
            user.last_name = last_name
                
            user.save( using = self._db )
            return user

        except Exception as e : raise Exception( e )
    


    def create_staffuser( self, email, password ) :

        try : 

            staffuser = self.create_user( email, password )
            staffuser.is_staff = True
            staffuser.save( using = self._db )

            return staffuser

        except Exception as e : raise Exception( e )



    def create_superuser( self, email = None, password = None ) :

        try : 

            superuser = self.create_staffuser( email, password )
            superuser.is_superuser = True
            superuser.save( using = self._db )

            return superuser

        except Exception as e : raise Exception( e )



Вот мой backends.py

from django.contrib.auth.backends import ModelBackend
from .models import User



class AuthBackend( ModelBackend ) : 

    def authenticate( email = None, password = None ) : 

        try : 

            user = User.objects.get( email = email )
            if user.check_password( password ) : return user
            else : raise Exception( 'Password Does Not Match...' )

        except Exception as e : raise Exception( str( e ) )
Вернуться на верх