[Django]-Django Registration Redux: how to change the unique identifier from username to email and use email as login

7๐Ÿ‘

You can override registration form like this

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

    def clean_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).

๐Ÿ‘คRajesh Kaushik

1๐Ÿ‘

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

๐Ÿ‘คEdwin Lunando

0๐Ÿ‘

You will want to use AbstractBaseUser. Docs are here:

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

Good luck!

๐Ÿ‘คFlipperPA

Leave a comment