用Facebook无法OAuth;我的下一个调试步骤是什么?

时间:2011-11-03 20:45:31

标签: python django facebook oauth-2.0

我有一个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总是Noneraw_response包含Error: {"error":{"message":"Error validating verification code.","type":"OAuthException"}}

相同的凭据可以使用JavaScript SDK进行验证。在这种情况下,我也将服务器绑定到localhost,并在我的官方应用域中设置localhost:8000。在我这样做之前,JavaScript不起作用。之后,它做到了。所以我认为localhost不是问题。

我已手动逐步执行代码,打印FB返回的code, 然后在python解释器中逐行手动运行上面的代码,并且 我看不出任何我做错的事。我的下一个调试步骤是什么? FB 如果您收到OAuthException,则文档提供的指导很少。

1 个答案:

答案 0 :(得分:3)

当您请求令牌时,redirect_uri使用的值必须与您请求代码时的值完全相同。由于在请求令牌时没有发生实际的重定向,因此很容易错过小的差异。在这种情况下,错误消息不是特别描述的;它的真正含义是“您发送的参数与您发送的代码值不符”。