我有一个Django模板,它通过执行以下操作来启动Facebook OAuth process:
window.location='https://www.facebook.com/dialog/oauth?client_id=MY_CLIENT_ID&redirect_uri=http%3A//localhost%3A8000/fbpanel/explore-python'然后,在我的Django视图中,我得到的结果代码如下:
import cgi
import urllib
# [...]
code = request.GET['code']
args = {
'client_id': MY_CLIENT_ID,
'redirect_uri': 'http://localhost:8000/fbpanel/explore_python'
'client_secret': MY_CLIENT_SECRET,
'code': code,
}
url = 'https://graph.facebook.com/oauth/access_token?' + \
urllib.urlencode(args)
raw_response = urllib.urlopen(url).read()
response = cgi.parse_qs(raw_response)
if response:
error = ''
if response['access_token']:
access_token = response['access_token'][0]
if response['expires']:
expires = response['expires'][0]
else:
access_token = 'No access token returned'
expires = 'No expiration given'
error = raw_response通常,response是None,raw_response包含Error: {"error":{"message":"Error validating verification code.","type":"OAuthException"}}
相同的凭据在JavaScript SDK中验证无误。在这种情况下,我也将我的服务器绑定到localhost,并在我的官方应用程序域中设置了localhost:8000。在我这样做之前,JavaScript不能工作。之后,它确实发生了。所以我不认为localhost是问题所在。
我手动遍历了代码,打印出FB返回的code,然后在python解释器中逐行手动运行上面的代码,我看不出有什么地方做错了。我的下一步调试步骤是什么?如果您收到OAuthException,FB文档提供的指导很少。
发布于 2011-11-05 01:43:06
请求令牌时,用于redirect_uri的值必须与请求代码时的值完全相同。由于在请求令牌时不会发生实际的重定向,因此很容易遗漏细微的差异。在这种情况下,错误消息并不是特别具有描述性;它真正的意思是“您发送的参数与您发送的代码值不对应”。
https://stackoverflow.com/questions/8001628
复制相似问题