Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 请求fb令牌仅在生产中返回django中的错误400:“;无效重定向“uri:不允许指定的URL…”;_Python_Django_Facebook Graph Api_Facebook Access Token - Fatal编程技术网

Python 请求fb令牌仅在生产中返回django中的错误400:“;无效重定向“uri:不允许指定的URL…”;

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,

我正在使用本教程尝试在python、django中获得fb api的长寿命访问令牌:

这对我来说是在开发服务器上本地工作,但不是在生产环境中

我在第一步中得到了一个代码,但在下一步中遇到了问题:第6步。将代码交换为访问令牌

以下是获取访问令牌的代码:

    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上工作。现在我将其移动到生产服务器,并将设置更改为生产域,但它不起作用。啊,我在您的描述中遗漏了这一部分(我决定对其进行编辑并加粗!)