tornado之用戶驗證裝飾器


authenticated裝飾器

  為了使用Tornado的認證功能,我們需要對登錄用戶標記具體的處理函數。我們可以使用@tornado.web.authenticated裝飾器完成它。當我們使用這個裝飾器包裹一個處理方法時,Tornado將確保這個方法的主體只有在合法的用戶被發現時才會調用。

class IndexHandler(tornado.web.RequestHandler):
  @tornado.web.authenticated
  def get(self):
    self.xsrf_token
    self.render("index.html")

 get_current_user()方法

  裝飾器@tornado.web.authenticated的判斷執行依賴於請求處理類中的self.current_user屬性,如果current_user值為假(None、False、0、""等),任何GET或POST請求都將把訪客重定向到應用設置中login_url指定的URL,而非法用戶的POST請求將返回一個帶有403(Forbidden)狀態的HTTP響應。

  在獲取self.current_user屬性的時候,tornado會調用get_current_user()方法來返回current_user的值。也就是說,我們驗證用戶的邏輯應寫在get_current_user()方法中,若該方法返回非假值則驗證通過,否則驗證失敗。

class IndexHandler(tornado.web.RequestHandler):
  # 由於使用了裝飾器tornado.web.authenticated,需要重寫get_current_user()
  # 用於校驗用戶登錄信息,此處返回Flase進行登錄攔截
  def get_current_user(self):
    # 此處用於完成驗證用戶信息
    f = True
    if f:
      return True
    else:
      return False
 
  # 默認調用get_current_user()方法
  @tornado.web.authenticated
  def get(self):
    self.xsrf_token
    self.render("index.html")

 login_url設置

   在login_url后面補充的next參數就是記錄的跳轉至登錄頁面前的所在位置,所以我們可以使用next參數來完成登陸后的跳轉。

if __name__ == '__main__':
  tornado.options.parse_command_line()
  settings = dict(
    cookie_secret="yyyyyyyyyyyy",
    login_url="/login",
    debug=True
  )
 
  app = tornado.web.Application([
    (r"/", IndexHandler),
    (r"/login", LoginHandler),
  ], **settings)
 
  http_server = tornado.httpserver.HTTPServer(app)
  http_server.listen(8000)
  tornado.ioloop.IOLoop.current().start()

 Next參數

   在login_url后面補充的next參數就是記錄的跳轉至登錄頁面前的所在位置,所以我們可以使用next參數來完成登陸后的跳轉

class LoginHandler(tornado.web.RequestHandler):
  def get(self):
    next_url = self.get_argument("next","/")
    if next_url:
      print(next_url)
      self.redirect(next_url + "?f=login")
    else:
      self.write("登陸頁面")

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM