'How To Implement Custom Password Hashing in Django?
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 ) )
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
