Skip to content Skip to sidebar Skip to footer

Django Registration Redux: How To Change The Unique Identifier From Username To Email And Use Email As Login

I'm using django-registration-redux in my project for user registration. It uses default User model which use username as the unique identifier. Now we want to discard username and

Solution 1:

You can override registration form like this

from registration.forms import RegistrationForm
classMyRegForm(RegistrationForm):
    username = forms.CharField(max_length=254, required=False, widget=forms.HiddenInput())

    defclean_email(self):
        email = self.cleaned_data['email']
        self.cleaned_data['username'] = email
        return email

And then add this to settings file (read this link for details)

REGISTRATION_FORM = 'app.forms.MyRegForm'

This will set the email to username field as well and then everything will work as email is now the username.

The only problem is that username field has a max lenght of 30 in DB. So emails longer than 30 chars will raise DB exception. To solve that override the user model (read this for details).

Solution 2:

The easiest way to achieve this is to made your own custom User Model.

This is the example

class MyUser(AbstractBaseUser):
    email = models.EmailField(
        verbose_name='email address',
        max_length=255,
        unique=True,
    )
    date_of_birth = models.DateField()
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)

    objects = MyUserManager()

    USERNAME_FIELD ='email'

Then, you need to set the User Model in your Django settings. https://docs.djangoproject.com/en/1.8/ref/settings/#auth-user-model

Solution 3:

You will want to use AbstractBaseUser. Docs are here:

https://docs.djangoproject.com/en/1.8/topics/auth/customizing/

Good luck!

Post a Comment for "Django Registration Redux: How To Change The Unique Identifier From Username To Email And Use Email As Login"