2010-07-16 138 views
1

難道有人請爲我解釋這裏發生了什麼?ruby​​ on rails 3關於before_filter的問題

我覺得文檔沒有提及很多或描述發生了什麼。它只是說這樣使用這種方法。

如果用戶名和密碼爲true,會發生什麼情況,如果false等會發生什麼?

class AdminController < ApplicationController 
    USERNAME, PASSWORD = "humbaba", "5baa61e4" 

    before_filter :authenticate 

    private 

    def authenticate 
    authenticate_or_request_with_http_basic do |username, password| 
     username == USERNAME && 
     Digest::SHA1.hexdigest(password) == PASSWORD 
    end 
    end 
end 

感謝

回答

2

before_filter方法確保私有方法authenticate是所有請求之前運行。

authenticate_or_request_with_http_basic彈出瀏覽器的「輸入您的用戶名和密碼」框,並將它們傳遞到塊中,如usernamepassword,在這種情況下。

如果該塊返回true(如果用戶名和密碼匹配),請求將繼續處理更具體的代碼。如果該塊返回false(用戶名和密碼不匹配),則請求被縮短,並返回帶有正確HTTP狀態碼的認證失敗頁面。在顯示失敗頁面之前,瀏覽器可能會重試該請求幾次。

+0

「彈出的瀏覽器‘中輸入您的用戶名和密碼’框」。我不太明白這一點。它會創建一個用戶在信息中鍵入的框?在哪裏以及如何?如果返回false,將顯示哪個頁面?有關詳細信息的信息如此之少:/ – 2010-07-16 17:10:38

+2

有一個[標準協議](http://en.wikipedia.org/wiki/Basic_access_authentication)用於通過HTTP進行身份驗證。瀏覽器會在網頁上方彈出自己的用戶名和密碼框。我不確定Rails爲認證失敗頁面返回的內容,但它可能是非常通用的。你有沒有試過運行這個代碼,但看到它的行動?這是理解的最佳方式。 – Matchu 2010-07-16 17:14:08

+1

[這裏是一個演示,告訴你登錄界面會是什麼樣的。](http://www.pagetutor.com/keeper/http_authentication/index.html)雖然你可能不應該將它用於公共Web應用程序,因爲普通用戶並不完全熟悉它。 – Matchu 2010-07-16 17:15:19

1

標準認證功能內置於每個瀏覽器中,稱爲「基本HTTP認證」。我相信你已經看到了一個通用的用戶名/密碼對話框(作爲你的操作系統的一部分)顯示在網頁上。就是這個。

其工作原理如下:

  • 瀏覽器發送GET一個受保護的URL
  • 服務器發送401響應,這意味着「需要授權」
  • 瀏覽器知道這意味着什麼,會彈出一個對話框,要求給用戶的用戶名/密碼
  • 當用戶提交時,瀏覽器發送另一個GET請求,但是帶有包含base64編碼用戶名和密碼的授權頭
  • Se rver檢查,如果成功的話 - 發回用請求的頁面

的內容在你before_filter你只是告訴Rails的執行上述所有的歌曲和舞蹈時,訪問的任何控制器動作200成功響應任何地方。 Rails處理上面描述的所有協議通信。

在拒絕訪問的情況下,Rails發回403 Forbidden響應,並且瀏覽器具有內置的方式顯示。

要了解更多:http://en.wikipedia.org/wiki/Basic_access_authentication

+0

很好的解釋!謝謝! – 2010-07-16 19:14:19