Моя компания создала библиотеку, которая делает интеграцию 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. Вы можете прочитать остальные документы здесь .