我正在使用django-socialregistration app让人们通过FB登录我的网站。
http://django-socialregistration.readthedocs.org/en/latest/index.html
对于Twitter,它工作正常,但对于Facebook,它会在用户登录到fb后不断返回此错误:
Credentials could not be validated, the provider returned no access token.
这是在应用程序中设置的错误集(在应用程序附带):
def get_access_token(self, code=None, **params):
"""
Return the memoized access token or go out and fetch one.
"""
if self._access_token is None:
if code is None:
raise ValueError(_('Invalid code.'))
self.access_token_dict = self._get_access_token(code, **params)
try:
self._access_token = self.access_token_dict['access_token']
except KeyError, e:
raise OAuthError("Credentials could not be validated, the provider returned no access token.")
所以我猜不能找到或检索访问令牌。
Facebook调试工具虽然在我输入了网址时返回了这个,
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC- html40/loose.dtd">
<html>
<head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head>
<body><p>Session expired.</p></body>
</html>
这是网址:
www.site.com/social/facebook/callback/?code=AQCb0lWCOTKFYaCQ43imfKvsMgo-8wyA8aq1WxZDWuCel2868I6gou2rn4bN2kTyuL14FxR9cCvrilJB2R5-JOnQqCvo7ihQAi9outrUB81MQdU-XA-5ur7MT5Wlhz3wkb5bc0fwzUYYFpSyeHNjFrIOY6QdZNdrXLcivv1-3qMNOKijLHf0jmZc7bBqPBTkw-Q#_=_
FB调试器的响应代码是200。
任何人都知道发生了什么事?
答案 0 :(得分:1)
答案 1 :(得分:0)
这可能不是您问题的解决方案,但它会为出错的地方提供更多信息。
修改上面的代码,将access_token_dict
转储到stdout:
def get_access_token(self, code=None, **params):
"""
Return the memoized access token or go out and fetch one.
"""
if self._access_token is None:
if code is None:
raise ValueError(_('Invalid code.'))
self.access_token_dict = self._get_access_token(code, **params)
try:
self._access_token = self.access_token_dict['access_token']
except KeyError, e:
print self.access_token_dict
raise OAuthError("Credentials could not be validated, the provider returned no access token.")
由于初始化和回调网址不匹配导致socialregistration
最常见的错误 - 例如,您从http://localhost:8000
开始并重定向回http://127.0.0.1:8000/*/callback/
,Django将无法访问到localhost
会话。
答案 2 :(得分:0)
您必须转到应用程序高级设置(转到http://developers.facebook.com并导航到您的appplication - &gt;设置 - &gt;高级)并将您的服务器IP添加到白名单。
我解决了这个问题。