我目前正在Django中开发一个应用程序,并试图实现Facebook身份验证和对Graph API的请求。我已经看到了一些不同的库,但是执行以下操作的最佳方法是什么:
我确实看到了this example。在正常的Django上这么简单吗?
答案 0 :(得分:2)
我的公司已经建立了一个库,可以将Facebook整合到您的Django应用程序中(我们可能已经使用该库构建了10-20个应用程序,包括一些具有大量流量的应用程序,因此它已经过战斗测试)。 / p>
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
现在只需将这些网址连接到您的 urls.py 文件中即可。
# ...
urlpatterns = patterns('app.views',
# ...
url(r'^oauth/facebook/begin$', 'oauth_facebook_begin'),
url(r'^oauth/facebook/complete$', 'oauth_facebook_complete'),
)
希望这有帮助!
P.S。您可以阅读其余文档here。
答案 1 :(得分:1)
我们在工作的地方做了很多Facebook应用程序开发,所以我们开发了an open-source library,这使得它的一切变得非常简单。
from django.http import HttpResponse
from fandjango.decorators import facebook_authorization_required
@facebook_authorization_required
def foo(request, *args, **kwargs):
return HttpResponse("Your name is %s" % request.facebook_user.first_name)
答案 2 :(得分:0)
我建议https://github.com/egnity/fb.py。立即启动并运行基于Django的Facebook应用程序。它包含一个中间件,允许您在视图中运行这样的代码:
表示用户ID:
user_id = request.facebook.graph().get_object("me")['id']
表示oauth令牌:
user_token = request.facebook.auth_token
然后,您可以根据需要将上述内容添加到您的用户模型中。要进行Graph API调用,您仍然可以使用fb.py的中间件 - 无需使用原始python-sdk。上面的user_id代码是Graph API调用的完美示例。你可以用fb.py做更多的事情。下载包括一个示例django项目,以帮助您前进。