Lighting talk on django-social-auth

  • 8,551 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
8,551
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
83
Comments
1
Likes
11

Embeds 0

No embeds

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!