Google Appengine 上 Facebook OAuth 的问题

0 投票
1 回答
1759 浏览
提问于 2025-04-16 12:16

我正在使用“服务器端”流程,通过Python在Google Appengine上获取用户访问某些信息的权限。

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

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

追踪信息(最近的调用在最前面):
文件 "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/init.py",第 515 行,在 call
handler.get(*groups) 文件 "/base/data/home/apps/finisherph/1.348502373491720746/controllers.py",第 21 行,在 get 中
data = urllib2.urlopen(access_token_url)
文件 "/base/python_runtime/python_dist/lib/python2.5/urllib2.py",第 124 行,在 urlopen 中
return _opener.open(url, data) 文件 "/base/python_runtime/python_dist/lib/python2.5/urllib2.py",第 387 行,在 open 中
response = meth(req, response) 文件 "/base/python_runtime/python_dist/lib/python2.5/urllib2.py",第 498 行,在 http_response 中
'http', request, response, code, msg, hdrs) 文件 "/base/python_runtime/python_dist/lib/python2.5/urllib2.py",第 425 行,在 error 中
return self._call_chain(*args) 文件 "/base/python_runtime/python_dist/lib/python2.5/urllib2.py",第 360 行,在 _call_chain 中
result = func(*args) 文件 "/base/python_runtime/python_dist/lib/python2.5/urllib2.py",第 506 行,在 http_error_default 中
raise HTTPError(req.get_full_url(), code, 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_token_url时,出现了以下错误:

{ "error": { "type": "OAuthException", "message": "验证代码时出错。" } }

我这里缺少了什么呢?

1 个回答

1

看起来你是想把 access_token 当作网址来访问,这样做是不太对的。

这里有一个 示例,展示了如何在 GAE 上通过 Facebook 进行 OAuth 认证。

撰写回答