Python 谷歌Appengine上的Facebook OAuth出现问题

Python 谷歌Appengine上的Facebook OAuth出现问题,python,google-app-engine,facebook,oauth,Python,Google App Engine,Facebook,Oauth,我使用“服务器端”流获得用户使用Python在Google Appengine上访问某些信息的权限 我能够在用户点击“允许”按钮后从Facebook获取服务器生成的代码 但是,当我获取访问令牌时,我遇到以下错误: 回溯(最近一次呼叫最后一次): 文件 “/base/python\u runtime/python\u lib/versions/1/google/appengine/ext/webapp/init.py”, 第515行,在呼叫中 handler.get(*groups)文件“/bas

我使用“服务器端”流获得用户使用Python在Google Appengine上访问某些信息的权限

我能够在用户点击“允许”按钮后从Facebook获取服务器生成的代码

但是,当我获取访问令牌时,我遇到以下错误:

回溯(最近一次呼叫最后一次):
文件 “/base/python\u runtime/python\u lib/versions/1/google/appengine/ext/webapp/init.py”, 第515行,在呼叫中 handler.get(*groups)文件“/base/data/home/apps/finisherph/1.3485023734491720746/controllers.py”, 第21行,进站 data=urllib2.urlopen(访问令牌url)
文件 “/base/python\u runtime/python\u dist/lib/python2.5/urllib2.py”, 第124行,在urlopen中 返回_opener.open(url,数据)文件 “/base/python\u runtime/python\u dist/lib/python2.5/urllib2.py”, 第387行,处于打开状态 响应=meth(请求,响应)文件 “/base/python\u runtime/python\u dist/lib/python2.5/urllib2.py”, 第498行,在http_响应中 “http”、请求、响应、代码、消息、hdrs)文件 “/base/python\u runtime/python\u dist/lib/python2.5/urllib2.py”, 第425行,错误 返回self.\u调用链(*args)文件 “/base/python\u runtime/python\u dist/lib/python2.5/urllib2.py”, 第360行,输入呼叫链 result=func(*args)文件“/base/python\u runtime/python\u dist/lib/python2.5/urllib2.py”, 第506行,在http\u错误\u默认值中 引发HTTPError(请求获取完整url(),代码, msg,hdrs,fp)HTTPError:HTTP错误 400:请求错误

这是我的控制器中的代码,用户点击“允许”按钮后,facebook会做出响应。这仍然是一个黑客,所以代码有点脏。仍在努力让它发挥作用

class Register(webapp.RequestHandler):
            def get(self):
                code=self.request.get('code')
                logging.debug("code: "+code)
                accesst_url=["https://graph.facebook.com/oauth/access_token?"]
                accesst_url.append("client_id=CLIENT_ID&")
                import urllib         
                accesst_url.append(urllib.urlencode
                    ({'redirect_uri':'http://my.website.com/register/facebook/'}))
                accesst_url.append('&')
                accesst_url.append("client_secret=CLIENT_SECRET&")
                accesst_url.append("".join(["code=",str(code)]))
                logging.debug(accesst_url)
                access_token_url="".join(accesst_url)
                logging.debug(access_token_url)
                import urllib2
                data = urllib2.urlopen(access_token_url)
                    ...
                    ...
错误发生在以下位置:

data = urllib2.urlopen(access_token_url)
当我从日志中复制并粘贴access\u token\u url时,出现以下错误:

{“错误”:{ “类型”:“OAutheException”, “消息”:“验证验证代码时出错。”}


我错过了什么

看起来您正试图以url的形式访问access_令牌,这不太正确

下面是一个例子,说明了如何通过FB通过GAE进行OAuth身份验证

  • 你去看电影了吗?使用您的客户端\u id和重定向\u uri
  • 授权后,它会给出一个代码,您可以使用
    code
    client\u secret
    从中获取
    access\u令牌
  • 然后你使用这个访问令牌作为Facebook用户进行操作

您是否正确构建了访问令牌url?当您在GAE之外请求url时会发生什么情况?我尝试在浏览器上执行此操作,并得到上面的OAutheException错误。这正是我尝试执行的操作,但在我的最后一步中得到了错误——当我使用代码请求访问令牌时,客户端不认为您正在执行相同的操作。您必须获取访问令牌并将其作为数据“urllib.urlencode”(acess\u token=“xxx”)发送1。不,我还没有尝试访问graph api。您只在访问graph api时发送访问令牌。我的问题是,我还无法从facebook检索访问令牌,因为我遇到了上面的oauth错误。我将此标记为正确答案,因为您向我展示了如何访问的源代码。它现在可以工作了。我认为我的问题是m是我没有编码我的URL。你总是必须使用urllib.urlencode(..)编码你的URL吗?谢谢:)urlencode引用键、值对,并在您可能手动错过的位置正确构造请求数据:)。我也要这么说。只需按照示例进行操作,它似乎在几行代码中都做得很好。谢谢。