Your SlideShare is downloading. ×
  • Like
Lighting talk on django-social-auth
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Lighting talk on django-social-auth

  • 8,596 views
Published

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,596
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!