2013-02-26 30 views
0

這裏是最初的代碼,從the Example不能得到的OAuth2用戶FB龍捲風例如

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默認!

請問你能解釋一下代碼嗎?

回答

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 

龍捲風授權碼是here

簡易版: 不要嘗試,並設置「代碼」變量 - 這是爲Facebook做。

+0

所以這是一種如果用戶還沒有登錄,顯示登錄頁面? – 2013-02-26 18:46:09

+1

是的 - 但請記住它是從Facebook提供的登錄頁面,而不是您的應用程序 – 2013-02-27 09:14:31

+0

和龍捲風將使用生成的cookie – 2013-02-27 10:30:58