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
anddjango-allauth
. In the end, I went withdjango-social-auth
(not to be confused withdjango-socialauth
) because a friend had recommended it and because I’d already installed it before I read this article. However, the article’s conclusion thatdjango-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 calleddjango-social-auth
, ranpip install -r requirements.txt
inside this virtualenv to install all the required apps, ranmanage.py syncdb
, and finally ranmanage.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 withdjango-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 anauth.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 elsedjango-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 preferreddjango-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.FacebookTwitterEmailShare
Posted Under Cool Stuff Projects Web Development
Thursday, November 24, 2011
django-social-auth: Installing and troubleshooting « William John Bert
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment