Bharathwaaj
Bharathwaaj

Reputation: 2697

How to have django auth take username and firstname same value?

Django auth has username and first_name fields. But username has field option unique=True. This prevents a user from giving first_name same as username when registering and raises IntegrityError. How to bypass this and also keeping username unique? ie. no two users should have the same username. But username can be same as first_name. And two users can have same first_name, last_name.

Upvotes: 0

Views: 439

Answers (2)

Rohan
Rohan

Reputation: 53386

You will have to implement custom authentication backend that used first_name as username.

During registration, you can duplicate username with first_name or generate random username which you will never use, as you will always use first_name instead.

You will have have to take care of

  • Take create while creating/registering user.
  • Username (in your case first name) should be unique

The code in authentication backend would be something like (this is just a sample code):

def authenticate(self, username=None, password=None):
    try:
        user = User.objects.get(first_name=username)
        if user.check_password(password):
            return user
    except User.DoesNotExist:
        return None 

Refer Writing authentication backend.

There are quite a few examples of how to user email to authenticate that you can refer to authenticate using first_name.

Upvotes: 1

zeroos
zeroos

Reputation: 2204

You cannot achieve that. If you want to have the same value in fields first_name and username and one of them is not unique, the other one also cannot be unique.

As far as I understand what you're doing here, you just want to display first_name instead of username - to achieve that just use {{ user.first_name }} instead of just {{ user }}. If you need to store some additional information about users you can also define Profiles where you can implement your own __str__ method.

Upvotes: 1

Related Questions