以下是来自the Example
的初始代码class AuthLoginHandler(BaseHandler, tornado.auth.FacebookGraphMixin):
@tornado.web.asynchronous
def get(self):
my_url = (self.request.protocol+"://"+self.request.host+"/auth/login?next="+tornado.escape.url_escape(self.get_argument("next", "/")))
print my_url
if self.get_argument("code", False):
self.get_authenticated_user(redirect_uri=my_url,client_id=facebook_api_key, client_secret=facebook_secret,code=self.get_argument("code"),callback=self._on_auth)
print "th"
print self.get_argument("code")
return
self.authorize_redirect(redirect_uri=my_url,client_id=facebook_api_key,extra_params={"scope": "read_stream"})
def _on_auth(self, user):
if not user:
raise tornado.web.HTTPError(500, "Facebook auth failed")
self.set_secure_cookie("user", tornado.escape.json_encode(user))
self.redirect(self.get_argument("next", "/"))
我得不到的是:
if self.get_argument("code", False):
这意味着什么?因为如果我self.get_argument("code")
我得错误缺少参数代码
为什么否定然后调用此参数code=self.get_argument("code")
我已经查看了文档,据我所知,False
默认更改Strip=True
!
你能告诉我代码吗?
答案 0 :(得分:1)
将'code'视为标志:'如果用户通过Facebook验证'。
If self.get_argument("code", False):
# Happy we are now authorized by Facebook
Get the Facebook user who is logged in (and then call '_on_auth')
return
(Else):
Ask for authorization
Tornado身份验证码为here
简单版本: 不要尝试设置'代码'变量 - 这是Facebook要做的。