Skip to content

Instantly share code, notes, and snippets.

@bryanchow
Created July 21, 2011 21:00
Show Gist options
  • Save bryanchow/1098189 to your computer and use it in GitHub Desktop.
Save bryanchow/1098189 to your computer and use it in GitHub Desktop.
EmailOrUsernameModelBackend - Django authentication backend for logging in using either username or email address
from django.contrib.auth.models import User
class EmailOrUsernameModelBackend(object):
"""
Custom authentication backend against django.contrib.auth.models.User that
allows logging in using either username or email address. Intended to be
used in conjunction with django.contrib.auth.backends.ModelBackend.
"""
def authenticate(self, username=None, password=None):
if '@' in username:
kwargs = {'email': username}
else:
kwargs = {'username': username}
try:
user = User.objects.get(**kwargs)
if user.check_password(password):
return user
except User.DoesNotExist:
return None
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
@fahadali32
Copy link

Why this is not working

@suman101
Copy link

Try this:
In your settings.py file add:
AUTHENTICATION_BACKENDS = ['authentication.views.EmailOrUsernameModelBackend']

In my case i have authentication app and inside this app i have views.py where i wrote this above class, and don't forgot to replace (object) as ModelBackend. This can surely help you

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment