如何在 Django 中实现自定义密码哈希?

发布于 2025-01-16 20:09:25 字数 2365 浏览 6 评论 0原文

所以我的经理要求我为我们的 django 网站实现 Base64 密码加密。我在 django.contrib.auth.hashers 中找不到任何 base64 哈希算法。所以,我认为我必须编写自己的 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 ) )

So my manager has asked me to implement Base64 Password Encryption for our django website. I can't find any base64 hashing algo in django.contrib.auth.hashers. So, I figured that I'd have to write my own Hasher module. Problem is, I don't know how. I have tried reading the django documentation but its still unclear to me. I just need my User's Passwords to be stored using Base64 Encryption in the database. Also, I need my Custom User Authentication to work accordingly.

Here's my User Model:

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()


Here's my User Manager:

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 )



Here's my 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 ) )

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文