William John Bert

Likes house music and sometimes being alone.

  • About
  • Publications
  • Projects
  • Contact

August 26, 2011
Posted by William

django-social-auth: Installing and troubleshooting

Thanks to django-registration, I was able to build a working account registration/login system pretty easily. But I wanted to give users the ability to use their existing accounts through popular services such as Facebook, Twitter, etc., rather than have to create yet another account. Here’s how I did it.

Sorting Through the Choices

There are a number of reusable Django apps out there to help with registration/login from social media sites. I found this Review of 4 Django Social Auth apps very helpful in sorting out the options. After reading it, I was left to choose between django-social-auth (I originally linked to the wrong app here, but this link is correct) and django-allauth. In the end, I went with django-social-auth (not to be confused with django-socialauth) because a friend had recommended it and because I’d already installed it before I read this article. However, the article’s conclusion that django-allauth is best out of the box also seems valid.

Installation

The instructions in django-social-auth‘s docs are helpful in walking you through available settings and options.

I also found the included example app useful. To use this app, I cloned django-social-auth‘s git repo, created a virtualenv called django-social-auth, ran pip install -r requirements.txt inside this virtualenv to install all the required apps, ran manage.py syncdb, and finally ran manage.py runserver. Voila, example app is up and running at 127.0.0.1, showing a simple screen with options to login through about a dozen different different services.

API Keys

The first service I tested was Twitter. I use it more than any others, and I already had the API keys for it. I threw my API key and secret key into the example local_settings.py file provided with django-social-auth and tried to log in via the example app. Boom: 401 Unauthorized. I double-checked all my settings and installation and whatnot. Seemed fine.

I turned my attention to the API keys. The ones I had were generated for Readsr, i.e., I entered readsrs.com as the domain when I generated them at dev.twitter.com. But now I was running on localhost, 127.0.0.1, so I suspected the readsrs.com keys wouldn’t be valid. I wasn’t sure whether Twitter would hand over a new consumer key for 127.0.0.1, or baulk at the request. (It seemed like it should do so, but I hadn’t seen any instructions anywhere that said to get a key for your development machine.) Turns out Twitter will happily give you a key for 127.0.0.1. Once I plugged the new keys in, I was able to log in with my Twitter credentials, and just as it should, django-social-auth automatically created an auth.user for this account.

Integrating with Readsr

I followed the instructions again to config my own app, Readsr. To add a login option using Twitter credentials, I put a link to the reversed view that begins the django-social-auth login process for twitter, i.e., {% url socialauth_begin "twitter" %}, to my login template. And it worked.

I still need to fix a few oddities. For example, Twitter returns my first and last names together in first_name (or else django-social-auth is concatenating them into that column), and doesn’t supply any email address. But the basic functionality is there, and was relatively easy to achieve.

Postscript

The author of the article I linked above had an error using OpenID when using django-social-auth, which is why he preferred django-authall. He filed a bug for the error he got, and I notice that it was closed 15 hours ago (though if you read the comments, it seems it was actually fixed back in mid-July). Good timing.

2 Comments

Posted Under Cool Stuff Projects Web Development

2 Comments

Riku
December 4, 2011

Hi!

Thanks for the tips!

However, I wasn’t able to install the test project. First, the requirements.txt didn’t include django, so I had to add that. Now I can’t run syncdb and get this error: Error: No module named openid_consumer

Can creating a virtualenv and/or cloning from github lead to pythonpath issues? Why would it not work out of the box as it apparently did for you?

Thanks a lot!

William
December 6, 2011

Hi, Thanks for your question. It made me realize that I linked to the wrong github page in my post. The app that I used successfully is django-social-auth but I mistakenly linked to Django-Socialauth (even though I wrote in my post that the names were not to be confused, I got confused by them…). django-social-auth does have django in requirements.txt, and I think you will find that it works better out of the box. Feel free to post back if that does not solve your problem.

Thanks, William

Leave a comment

* = Required

    • Latest Posts
    •  

      Novelties &...

      Cool Stuff

       

      Gender,...

      Cool Stuff

       

      django-social-auth...

      Cool Stuff

    • Twitter
    • Getting the News — Chris Dixon | News.me http://t.co/x5iYQq7t (via Instapaper)

      follow me on
      twitter

  • William's bookshelf: read

    The Thousand Autumns of Jacob de Zoet
    A Gate at the Stairs
    Our Story Begins: New and Selected Stories
    Selected Stories
    Letters to Wendy's
    A Lover's Discourse: Fragments
    Lunch Poems
    Saturday
    Lucky Jim
    Einstein: His Life and Universe
    Bel Canto
    Mulliner Nights
    William Trevor: The Collected Stories
    The Norton Book of Personal Essays
    Stiff Upper Lip, Jeeves


    William Bert's favorite books »
  • Links

    • 826DC
    • Allyson Rudolph
    • Call + Response
    • DC Commission on the Arts and Humanities
    • Draft: The Journal of Process
    • Me, tumbling
    • Mike Scalise
    • not a hotel
    • Punching Little Birds in the Face
    • Sean Carman
  • Categories

    • Communications
    • Cool Stuff
    • Interests
    • Meta
    • Other
    • Projects
    • Teaching
    • Web Development
    • Writing
      • Publications
  • Archives

    • 2011
      • November
      • September
      • August
      • July
      • June
      • May
      • March
      • February
      • January
    • 2010
      • December
      • November
      • September

This site is using the Handgloves WordPress Theme
Designed & Developed by George Wiscombe

Subscribe via RSS