使用者驗證是指在收到使用者請求後進行處理前先判斷使用者的認證狀態(如登陸狀態),若通過驗證則正常處理,否則強制使用者跳轉至認證頁面(如登陸頁面)。
為了使用tornado的認證功能,我們需要對登入使用者標記具體的處理函式。我們可以使用@tornado.web.authenticated裝飾器完成它。當我們使用這個裝飾器包裹乙個處理方法時,tornado將確保這個方法的主體只有在合法的使用者被發現時才會呼叫。
class
profilehandler
(requesthandler)
: @tornado.web.authenticated
defget(self)
: self.write(
"這是我的個人主頁。"
)
裝飾器@tornado.web.authenticated的判斷執行依賴於請求處理類中的self.current_user屬性,如果current_user值為假(none、false、0、""等),任何get或head請求都將把訪客重定向到應用設定中login_url指定的url,而非法使用者的post請求將返回乙個帶有403(forbidden)狀態的http響應。
在獲取self.current_user屬性的時候,tornado會呼叫get_current_user()方法來返回current_user的值。也就是說,我們驗證使用者的邏輯應寫在get_current_user()方法中,若該方法返回非假值則驗證通過,否則驗證失敗。
class
profilehandler
(requesthandler)
:def
get_current_user
(self)
:"""在此完成使用者的認證邏輯"""
user_name = self.get_argument(
"name"
,none
)return user_name
@tornado.web.authenticated
defget(self)
: self.write(
"這是我的個人主頁。"
)
class
loginhandler
(requesthandler)
:def
get(self)
:"""在此返回登陸頁面"""
self.write(
"登陸頁面")[
(r"/"
, indexhandler)
,(r"/profile"
, profilehandler)
,(r"/login"
, loginhandler),]
,"login_url"
:"/login"
)
想一想,完成登陸操作後應該進入哪個頁面?
在login_url後面補充的next引數就是記錄的跳轉至登入頁面前的所在位置,所以我們可以使用next引數來完成登陸後的跳轉。
修改登陸邏輯:
class
loginhandler
(requesthandler)
:def
get(self)
:"""登陸處理,完成登陸後跳轉回前一頁面"""
next
= self.get_argument(
"next"
,"/"
) self.redirect(
next
+"?name=logined"
)
使用tornado實現使用者認證
關於使用者的登入狀態,一部分的應用程式是採用session實現的。http是乙個無狀態協議,使用者的每次請求都是相互獨立的,http本身意識不到使用者是否登入。很多web框架選擇將session存放在cookies中,本節我們也是這樣實現 import tornado.ioloop import t...
15 驗證回文串
給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。1.先將字串的大寫字母全部轉換為小寫字母。2.定義兩個指標begin和end,遍歷字串 1 如果不是小寫字母或數字,則後移 前移指標的位置,直至指標所指內容為字母或者數字 2 如果是字母或者數字,則比較begin和end所...
Apache使用者驗證
環境 fedora 13 假設 當使用者訪問我伺服器上某個目錄,需要使用者輸入使用者名稱和密碼,通過驗證之後才能訪問目錄下的內容。目錄 var www html 使用者名稱 admin 密碼 admin 第1步 我們在 var www 目錄下建立html目錄 mkdir var www htm 一般...