This guide assumes you already have a Django project and that all your applications use the recommended Django methods for enforcing authentication, such as the login_required decorator.

It also assumes that you have already created your OneAll site named mysite, with public and private keys, and that you have already used the OneAll control panel to set up at least one initial social network for login.

First, add django_oneall to INSTALLED_APPS, make sure you have django.contrib.auth before it:

    # (…)

Second, add the Django authentication backends:

    'django_oneall.auth.EmailTokenAuthBackend',  # Optional

Third, add the OneAll settings. Here’s a minimal set-up:

    'credentials': {
        'site_name': 'mysite',
        'public_key': '2d27cffd-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
        'private_key': '84d94998-xxxx-xxxx-xxxx-xxxxxxxxxxxx',

Here’s a different, more detailed alternative to the third step:

    'credentials': {
        'site_name': 'mysite',
        'public_key': '2d27cffd-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
        'private_key': '84d94998-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
    'login_widget': {
        'providers': ['amazon', 'blogger', 'disqus', 'draugiem', 'facebook',
                      'foursquare', 'github', 'google', 'instagram', 'linkedin',
                      'livejournal', 'mailru', 'odnoklassniki', 'openid',
                      'paypal', 'reddit', 'skyrock', 'stackexchange', 'steam',
                      'twitch', 'twitter', 'vimeo', 'vkontakte', 'windowslive',
                      'wordpress', 'yahoo', 'youtube'],
        'grid_sizes': [7, 5],
        # Any setting allowed in the login widget assistant can be put here.
    'store_user_info': True,
    'email_token_expiration_hours': 3,

If you plan to use E-mail Token authentication, you must also configure your e-mail backend. Here’s a good setting for development:

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

Update Database

As with any Django app install: migrate

After that, if you’re updating from 0.1.4 or older, the legacy table oneall_cache is ignored since 0.2 (September 2015). In order to import users from the old to the new table, you need to also run: legacyimport

Add the following URL pattern to your urlpatterns in your global

import django_oneall.urls

url(r'^accounts/', include(django_oneall.urls)),

Using this Django App in /accounts/ will work as a drop-in replacement to django.contrib.auth.

However, if you’re using django.contrib.admin, it implements its own login screen, which conflicts with OneAll’s. You then need to also override its login screen like so:

import django_oneall.views

url(r'^admin/login', django_oneall.views.oa_login),
url(r'^admin/', include(,

Super User

The super user command is:

python setsuperuser [user]

Where [user] can be either of:

  1. OneAll Token (a UUID).
  2. Django user Id (an integer; see your auth_user table for a list).
  3. An e-mail address.

For OneAll Token or Django user Id, your user must already exist and they will be promoted.

For e-mail authentication, the user will be created if necessary and will be promoted regardless. The console will display the e-mail login link to be manually pasted in a web browser. Should your end user be unavailable to complete login, don’t worry, they have already been made super-user.

Templates and Views

This is an optional step. You’ll see that there are three views provided by this package, with two templates:

Suggested Route View name HTML Template
/accounts/login oa_login login.html
/accounts/logout oa_logout (none)
/accounts/profile oa_profile profile.html

The default login.html and profile.html are built to be simple and effective. However, should you need any customization, it’s recommended to copy these two files to your project’s templates directory like below and modify them to suit your needs:

+- myproj
|  +-
|  +-
|  +-
+- templates
   +- oneall
      +- login.html
      +- profile.html

Should you create any further pages that implement OneAll widgets, include in their <head>:

{% load oneall %}
{% oneall_header %}

The login widget itself can be included manually as instructed through the wizard, or, if you’re feeling lazy:

{% oneall_social_login %}

You can also pass an optional argument (it must be the Django User object) if you want social linking instead:

{% oneall_social_login current_user %}