python - "Missing redirect_uri parameter"来自 Facebook 的 Python/Django 响应

标签 python facebook http ssl httplib

这可能是一个非常愚蠢的问题,但我已经盯着它看了好几个小时,却找不到我做错了什么。

我正在尝试使用 Python 对 Facebook API 进行身份验证,但在请求用户访问 token 时遇到问题。收到代码后,我向 https://graph.facebook.com/oauth/access_token 提出请求像这样:

conn = httplib.HTTPSConnection("graph.facebook.com")
params = urllib.urlencode({'redirect_uri':request.build_absolute_uri(reverse('some_app.views.home')),
                           'client_id':apis.Facebook.app_id,
                           'client_secret':apis.Facebook.app_secret,
                           'code':code})
conn.request("GET", "/oauth/access_token", params)
response = conn.getresponse()
response_body = response.read()

作为回应,我收到

{"error":{"message":"Missing redirect_uri parameter.","type":"OAuthException","code":191}}

有什么可能出错的想法吗?我已经验证传递的 redirect_uri 在应用程序域中,但它是在本地托管并且该域只是通过我的主机文件重定向到 localhost 吗?

感谢您的帮助!

编辑:

我使用请求库使它工作:

params = {'redirect_uri':request.build_absolute_uri(reverse('profiles.views.fb_signup')),
                           'client_id':apis.Facebook.app_id,
                           'client_secret':apis.Facebook.app_secret,
                           'code':code}

r = requests.get("https://graph.facebook.com/oauth/access_token",params=params)

但是,我仍然更愿意依赖一个库,因为它应该在没有太多困难的情况下得到 native 支持。也许这是要求太多...

最佳答案

在您的第一个示例中(使用 HTTPSConnection 的示例), 您正在请求正文中传递 params:

conn.request("GET", "/oauth/access_token", params)

这是不正确的(GET 请求应该没有正文)。 相反,参数应该作为查询字符串传递 网址的一部分:

conn.request("GET", "/oauth/access_token?" + params) 

关于python - "Missing redirect_uri parameter"来自 Facebook 的 Python/Django 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11076119/

相关文章:

Python MySQLdb 处理多个游标 : Command out of sync

Android Facebook Activity 邀请

php - 如何逐行流式传输 GET 请求?

Ruby 连接到 REST 服务

angular - Angular 中的通用 http 错误处理

python - 在字符串列表中将 None 更改为 Float (Python)

python - "ImportError: No module named pwd"但它存在

python - Django 获取表单未排序列表

iphone - 向 Facebook 和 Google+ 好友发送邀请

android - Facebook Android sdk 游戏请求对话框显示 "Game Requests are only available to games"