django-browserid will automatically create a user account for new users. The user account will be created with the verified email returned from the BrowserID verification service, and a URL safe base64 encoded SHA1 of the email with the padding removed as the username.
To provide a customized username, you can provide a different algorithm via your settings.py:
# settings.py
BROWSERID_CREATE_USER = True
def username(email):
return email.rsplit('@', 1)[0]
BROWSERID_USERNAME_ALGO = username
You can can provide your own function to create users by setting BROWSERID_CREATE_USER to a string path pointing to a function:
# module/util.py
def create_user(email):
return User.objects.create_user(email, email)
# settings.py
BROWSERID_CREATE_USER = 'module.util.create_user'
You can disable account creation, but continue to use the browserid_verify view to authenticate existing users with the following:
BROWSERID_CREATE_USER = False
If you want to customize the verification view, you can do so by subclassing django_browserid.views.Verify and overriding the methods to insert your custom logic.
If you want complete control over account verification, you should create your own view and use django_browserid.verify() to manually verify a BrowserID assertion with something like the following:
from django_browserid import get_audience, verify
from django_browserid.forms import BrowserIDForm
def myview(request):
# ...
if request.method == 'POST':
form = BrowserIDForm(data=request.POST)
if form.is_valid():
result = verify(form.cleaned_data['assertion'], get_audience(request))
if result:
# check for user account, create account for new users, etc
user = my_get_or_create_user(result['email'])
See django_browserid.verify() for more info on what verify returns.
Django 1.5 allows you to specify a custom model to use in place of the built-in User model with the AUTH_USER_MODEL setting. django-browserid supports custom User models, but you will most likely need to add a few extra customizations to make things work properly: