在生产环境中Django请求fb令牌返回错误400:“无效的redirect_uri: 指定的URL不被允许...”

0 投票
1 回答
825 浏览
提问于 2025-04-17 13:31

我正在尝试在 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”添加到你的“应用域名”里。

  1. https://developers.facebook.com/apps
  2. 点击你想调试的应用旁边的“编辑”按钮。
  3. 在“应用域名”这一行,输入localhost(另外注意那里的帮助文本,上面写着:“在域名和子域名上启用认证”)。

撰写回答