Python 请求fb令牌仅在生产中返回django中的错误400:“;无效重定向“uri:不允许指定的URL…”;
我正在使用本教程尝试在python、django中获得fb api的长寿命访问令牌: 这对我来说是在开发服务器上本地工作,但不是在生产环境中强> 我在第一步中得到了一个代码,但在下一步中遇到了问题:第6步。将代码交换为访问令牌 以下是获取访问令牌的代码:Python 请求fb令牌仅在生产中返回django中的错误400:“;无效重定向“uri:不允许指定的URL…”;,python,django,facebook-graph-api,facebook-access-token,Python,Django,Facebook Graph Api,Facebook Access Token,我正在使用本教程尝试在python、django中获得fb api的长寿命访问令牌: 这对我来说是在开发服务器上本地工作,但不是在生产环境中 我在第一步中得到了一个代码,但在下一步中遇到了问题:第6步。将代码交换为访问令牌 以下是获取访问令牌的代码: params = { 'client_id': app_id, 'client_secret': app_secret,
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:错误的请求
它正在开发服务器上工作。
当我使用returnredirect(url)
而不是urlib2.urlopen(url)
时,我被重定向到有效的访问令牌。
为什么它不适用于urlopen
更新
这是fb api的回应:
Invalid redirect_uri: The specified URL is not allowed by the configuration of the application
您可能需要在Facebook应用程序面板中添加“localhost”作为“应用程序域”之一
localhost
(还请注意其中的帮助文本,内容为:“在域和子域上启用身份验证”)我看到您正在使用请求对象而不是url字符串调用urllib2.urlopen(…)。我也在使用url字符串调用。这没什么区别。你需要先在Facebook上的应用程序设置中设置此url。具体来说,在basic中:“Site url”我在应用程序设置中设置了“Site url”。但它在localhost上工作。现在我将其移动到生产服务器,并将设置更改为生产域,但它不起作用。啊,我在您的描述中遗漏了这一部分(我决定对其进行编辑并加粗!)