Lighting talk on django-social-auth
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Lighting talk on django-social-auth

  • 9,513 views
Uploaded on

A quick tutorial on using django-social-auth, the best registration system for Django today.

A quick tutorial on using django-social-auth, the best registration system for Django today.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
9,513
On Slideshare
9,339
From Embeds
174
Number of Embeds
7

Actions

Shares
Downloads
82
Comments
1
Likes
11

Embeds 174

http://www.nerdyang.com 139
http://www.mefeedia.com 17
http://yanng.sinaapp.com 7
http://www.xinyuandan.me 6
http://www.linkedin.com 3
http://xinyuandan.me 1
https://www.linkedin.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

Transcript

  • 1. Registration &AuthenticationA story about Django and OAUTH
  • 2. Daniel Greenfeld @pydanny Who am I? Daniel Greenfeld (@pydanny) Pythonista at Cartwheel Djangonaut at Revsys http://opencomparison.org Fiancé of Audrey Royhttp://www.flickr.com/photos/pydanny/4442245488
  • 3. Why am I talking?
  • 4. We have needs
  • 5. Daniel Greenfeld @pydannyWhat we need
  • 6. Daniel Greenfeld @pydanny What we need• Registration of new users
  • 7. Daniel Greenfeld @pydanny What we need• Registration of new users• Authentication of existing users
  • 8. Daniel Greenfeld @pydanny What we need• Registration of new users• Authentication of existing users• Unless we are an ad-click content farm
  • 9. Daniel Greenfeld @pydannyUse OAUTH
  • 10. Daniel Greenfeld @pydanny Use OAUTH• People use Twitter/Facebook/etc
  • 11. Daniel Greenfeld @pydanny Use OAUTH• People use Twitter/Facebook/etc• Fewer passwords to memorize
  • 12. Daniel Greenfeld @pydanny Use OAUTH• People use Twitter/Facebook/etc• Fewer passwords to memorize• Our site needn’t store passwords
  • 13. Daniel Greenfeld @pydanny Use OAUTH• People use Twitter/Facebook/etc• Fewer passwords to memorize• Our site needn’t store passwords• Twitter/Facebook/etc gets to worry about security
  • 14. But OAUTH is a pain
  • 15. Everyone implements it differently
  • 16. Daniel Greenfeld @pydannyDifferent flavors
  • 17. Daniel Greenfeld @pydanny Different flavors• Twitter
  • 18. Daniel Greenfeld @pydanny Different flavors• Twitter• Facebook
  • 19. Daniel Greenfeld @pydanny Different flavors• Twitter• Facebook• Google
  • 20. Daniel Greenfeld @pydanny Different flavors• Twitter• Facebook• Google• Linkedin
  • 21. Daniel Greenfeld @pydanny Different flavors• Twitter• Facebook • Github (YAY!)• Google• Linkedin
  • 22. Daniel Greenfeld @pydanny Different flavors• Twitter• Facebook • Github (YAY!)• Google • Facebook ARGH• Linkedin
  • 23. Daniel Greenfeld @pydanny Different flavors• Twitter• Facebook • Github (YAY!)• Google • Facebook ARGH• LinkedinThe OAUTH specification is not honored well
  • 24. Daniel Greenfeld @pydanny Different flavors • Twitter • Facebook • Github (YAY!) • Google • Facebook ARGH • Linkedin The OAUTH specification is not honored wellImplementation changes are sometimes not announced
  • 25. You want a tool used by many people
  • 26. Many people means lots of eyes
  • 27. Let’s find a tool!
  • 28. Daniel Greenfeld @pydanny Django Auth Optionshttp://djangopackages.com/grids/g/authentication/
  • 29. Daniel Greenfeld @pydanny Django Auth Options Dozens more if you scrollhttp://djangopackages.com/grids/g/authentication/
  • 30. Daniel Greenfeld @pydanny Many problems• django-tastypie and Piston are for APIs• Most of these lack tests• Most of these lack documentation• Bad code smell
  • 31. They all suck for OAUTH?
  • 32. One Good Tool!
  • 33. Daniel Greenfeld @pydanny django-social-auth• https://github.com/omab/django-social-auth• http://django-social-auth.rtfd.org
  • 34. Daniel Greenfeld @pydannydjango-social-auth
  • 35. Daniel Greenfeld @pydanny django-social-auth• Tests!
  • 36. Daniel Greenfeld @pydanny django-social-auth• Tests!• Docs!
  • 37. Daniel Greenfeld @pydanny django-social-auth• Tests!• Docs!• Good code smell!
  • 38. Daniel Greenfeld @pydanny Statisticshttp://djangopackages.com/packages/p/django-social-auth/
  • 39. Daniel Greenfeld @pydanny Statistics Many downloadshttp://djangopackages.com/packages/p/django-social-auth/
  • 40. Daniel Greenfeld @pydanny Statistics Ongoing development Many downloadshttp://djangopackages.com/packages/p/django-social-auth/
  • 41. Daniel Greenfeld @pydanny Statistics Ongoing development Many downloads Many eyes on the problemhttp://djangopackages.com/packages/p/django-social-auth/
  • 42. Usingdjango-social-auth
  • 43. Daniel Greenfeld @pydanny Get the dependencypip install django-social-auth==0.5.13
  • 44. Daniel Greenfeld @pydanny Part I: settings.pyINSTALLED_APPS = ( ... social_auth, ...)AUTHENTICATION_BACKENDS = ( social_auth.backends.contrib.github.GithubBackend,# keep this so you have that admin level backend access! django.contrib.auth.backends.ModelBackend,)
  • 45. Daniel Greenfeld @pydanny Part II: settings.pyfrom django.template.defaultfilters import slugifySOCIAL_AUTH_ENABLED_BACKENDS = (github,)SOCIAL_AUTH_COMPLETE_URL_NAME = socialauth_completeSOCIAL_AUTH_ASSOCIATE_URL_NAME = associate_completeSOCIAL_AUTH_DEFAULT_USERNAME = lambda u: slugify(u)SOCIAL_AUTH_EXTRA_DATA = FalseSOCIAL_AUTH_CHANGE_SIGNAL_ONLY = TrueSOCIAL_AUTH_ASSOCIATE_BY_MAIL = True # associate user via email (Usually you can just go with these as your settings)
  • 46. Daniel Greenfeld @pydannyPart III: root urls.py urlpatterns = patterns("", url(, include(social_auth.urls)), ... )
  • 47. Daniel Greenfeld @pydanny Part IV: profile/views.pyfrom social_auth.signals import pre_updatefrom social_auth.backends.contrib.github import GithubBackendfrom profiles.models. import Profiledef github_user_update(sender, user, response, details, **kwargs): profile_instance, created = Profile.objects.get_or_create(user=user) profile_instance.save() return Truepre_update.connect(github_user_update, sender=GithubBackend)(Not specifying this view in urls - django-social-auth does it for me)
  • 48. Daniel Greenfeld @pydanny Try it yourself!http://djangopackages.com/login/
  • 49. Thanks!