Моя компания создала библиотеку, которая максимально упрощает интеграцию Facebook в ваше приложение Django (мы, вероятно, создали 10-20 приложений с этой библиотекой, в том числе с огромным объемом трафика, так что она была проверена в бою).
pip install ecl-facebook==1.2.7
В настройках добавьте значения для FACEBOOK_KEY, FACEBOOK_SECRET, FACEBOOK_SCOPE, FACEBOOK_REDIRECT_URL и PRIMARY_USER_MODEL. Вам также нужно будет добавить ecl_facebook.backends.FacebookAuthBackend к вашему AUTHENTICATION_BACKENDS. Например, в settings.py:
# These aren't actual keys, you'll have to replace them with your own :)
FACEBOOK_KEY = "256064624431781"
FACEBOOK_SECRET = "4925935cb93e3446eff851ddaf5fad07"
FACEBOOK_REDIRECT_URL = "http://example.com/oauth/complete"
FACEBOOK_SCOPE = "email"
# The user model where the Facebook credentials will be stored
PRIMARY_USER_MODEL = "app.User"
AUTHENTICATION_BACKENDS = (
# ...
'ecl_facebook.backends.FacebookAuthBackend',
)
Добавьте несколько представлений в файл views.py для обработки логики до и после аутентификации.
from django.contrib.auth import authenticate, login
from django.http import HttpResponseRedirect
from ecl_facebook.django_decorators import facebook_begin, facebook_callback
from ecl_facebook import Facebook
from .models import User
# ...
@facebook_begin
def oauth_facebook_begin(request):
# Anything you want to do before sending the user off to Facebook
# for authorization can be done here.
pass
@facebook_callback
def oauth_facebook_complete(request, access_token, error):
if error is None:
facebook = Facebook(token)
fbuser = facebook.me()
user, _ = User.objects.get_or_create(facebook_id=fbuser.id, defaults={
'access_token': access_token})
user = authenticate(id=user.id)
login(request, user)
return HttpResponseRedirect("/")
else:
# Error is of type ecl_facebook.facebook.FacebookError. We pass
# the error back to the callback so that you can handle it
# however you want.
pass
Теперь просто подключите эти URL-адреса к файлу urls.py, и все готово.
# ...
urlpatterns = patterns('app.views',
# ...
url(r'^oauth/facebook/begin$', 'oauth_facebook_begin'),
url(r'^oauth/facebook/complete$', 'oauth_facebook_complete'),
)
Надеюсь это поможет!
P.S. Остальные документы можно прочитать здесь.
person
dwlz
schedule
15.04.2012