我正在使用“服务器端”流程来获取用户在Google Appengine上使用Python访问某些信息的权限。
用户点击“允许”按钮后,我可以从Facebook获取服务器生成的代码。
但是当我获得访问令牌时,我遇到以下错误:
追踪(最近的呼叫最后):
文件 “/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/init.py” 第515行,致电 handler.get(* groups)文件“/base/data/home/apps/finisherph/1.348502373491720746/controllers.py”, 第21行,在得到 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行,公开 response = meth(req,response)文件 “/base/python_runtime/python_dist/lib/python2.5/urllib2.py” 第498行,在http_response中 'http',请求,响应,代码,消息,hdrs)文件 “/base/python_runtime/python_dist/lib/python2.5/urllib2.py” 第425行,错误 return self._call_chain(* args)文件 “/base/python_runtime/python_dist/lib/python2.5/urllib2.py” 第37行,在_call_chain中 result = func(* args)文件“/base/python_runtime/python_dist/lib/python2.5/urllib2.py”, 第506行,在http_error_default中 提出HTTPError(req.get_full_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_token_url时,出现以下错误:
{“error”:{ “type”:“OAuthException”, “message”:“验证验证码时出错”。 }}
我在这里缺少什么?
答案 0 :(得分:1)
看起来你正试图将access_token作为url访问,这是不对的。
以下是an example,其中说明了如何通过GA在OAE上进行OAuth身份验证。
code
和client_secret
从https://graph.facebook.com/oauth/access_token获取access_token