jaco's blog

An experimental blog

Custom Django Auth to Login With Email

| Comments

Someone asked in django irc channel (#django on freenode): how can login using email as user?

In my opinion there is a simple way: write a custom auth backend.

settings.py
1
2
3
4
AUTHENTICATION_BACKENDS = (
    'backend.email-auth.EmailBackend',
    'django.contrib.auth.backends.ModelBackend',
)

at this point you can write your custom backend:

backend/email-auth.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from django.db import models
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User
import re

email_re = re.compile(
    r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*"
    r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-\011\013\014\016-\177])*"'
    r')@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}$', re.IGNORECASE)


class BasicBackend:
    def get_user(self, user_id):
        try:
            return User.objects.get(pk=user_id)
        except User.DoesNotExist:
            return None

class EmailBackend(BasicBackend):
    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:
            try:
                user = User.objects.get(username=username)
            except User.DoesNotExist:
                return None
        if user.check_password(password):
            return user

thats’all

Welcome Octopress

| Comments

Another blog is online, and the good news is another “Octopress Blog” is online.

So finally i moved from my experimental real time blog made with tornado to an “old” blogging style.

If you don’t know what “Octopress is” i’ll quote from octopress web site:

Octopress is a framework designed by Brandon Mathis for Jekill, the blog aware static site generator powering Github Pages. To start blogging with Jekyll, you have to write your own HTML templates, CSS, Javascripts and set up your configuration. But with Octopress All of that is already taken care

So welcome octopress and bye bye tornado, i’ll write more next days