在生产环境中Django请求fb令牌返回错误400:“无效的redirect_uri: 指定的URL不被允许...”
我正在尝试在 Python 和 Django 中为 Facebook API 获取一个长期有效的 访问令牌,我参考了这个教程:http://developers.facebook.com/docs/howtos/login/server-side-login/
在我的开发服务器上,这个方法可以正常工作,但在生产环境中却不行!
我在第一步得到了一个 代码,但在下一步遇到了问题:第六步:用代码换取访问令牌
这是我用来获取访问令牌的代码:
params = {
'client_id': app_id,
'client_secret': app_secret,
'code': code,
'redirect_uri': "http://" + Site.objects.get_current().domain + reverse("login_fb")
}
url = "https://graph.facebook.com/oauth/access_token?" + urllib.urlencode(params)
headers = {'User-Agent': 'Mozilla/5.0'}
request = urllib2.Request(url, headers=headers, data=urllib.urlencode(params))
response = urllib2.urlopen(request)
当我发出请求时,出现了一个错误:HTTP 错误 400:错误的请求。在开发服务器上是可以正常工作的。
当我用 return redirect(url)
替代 urllib2.urlopen(url)
时,我被重定向到了有效的访问令牌。
为什么用 urlopen 不行呢?
更新
这是 Facebook API 的响应:
Invalid redirect_uri: The specified URL is not allowed by the configuration of the application
1 个回答
0
你可能需要在你的Facebook应用面板中,把“localhost”添加到你的“应用域名”里。
- https://developers.facebook.com/apps
- 点击你想调试的应用旁边的“编辑”按钮。
- 在“应用域名”这一行,输入
localhost
(另外注意那里的帮助文本,上面写着:“在域名和子域名上启用认证”)。