"""
@author: chris http://djangosnippets.org/snippets/1845/
updated to 1.3 by Łukasz Kidziński
"""
from django.contrib.auth.models import User
from django.core.validators import email_re
class EmailBackend:
"""
Authenticate with e-mail.
Use the e-mail, and password
Should work with django 1.3
"""
supports_object_permissions = False
supports_anonymous_user = False
supports_inactive_user = False
def authenticate(self, username=None, password=None):
if email_re.search(username):
try:
user = User.objects.get(email=username)
except User.DoesNotExist:
return None
else:
#We have a non-email address username we should try username
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
return None
if user.check_password(password):
return user
return None
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
Comments
You should add to the comment section text: "inspired by http://djangosnippets.org/snippets/74/", especially when You are to lazy to remove chris' comments ;-)
#
Link to orginal version was (and still is) in comment on right. Nevertheless I've added it to code as well. Sorry for inconvenience :)
#
:-)
Because I'm a little bit persnickety, I have to say that you've made a mistake "cris => chris" ;-p
Regards.
#
That snippet uses the undocumented 'email_re' which has broken and could break again. Besides, it didn't work for me. It also assumes that a valid email string couldn't be a username. Here's my version:
#