2011-02-24 60 views
15

Restful Authentication使用authenticate_with_http_basic,但網上的搜索可以找到許多沒有說明的頁面。在官方http://api.rubyonrails.org/,它也可以找到,除了沒有描述,沒有評論,沒有規格。在Ruby on Rails中,authenticate_with_http_basic是做什麼的?

它是做什麼的?它似乎能夠使用來自HTTP請求的login_namepassword,然後可以將它們與users表中的login_nameencrypted_password進行比較......但情況是這樣,爲什麼甚至不存在單行描述?

回答

18

此方法允許您實現基本的HTTP身份驗證(彈出一個小對話框詢問用戶名和密碼的類型)。這通常是限制訪問開發網站或管理區域的好方法。例如:

class AdminController < ApplicationController 
    before_filter :authenticate 

    def authenticate 
    authenticate_or_request_with_http_basic('Administration') do |username, password| 
     username == 'admin' && password == 'password' 
    end 
    end 
end 

這個功能將要麼使對基本的HTTP驗證用戶名和密碼的請求,或者已經進入後,它實際上將檢查驗證是正確的。換句話說,該功能將撥打authenticate_with_http_basic或撥打電話request_http_basic_authentication。你可以閱讀更多關於它並看到更多的例子here。您通常會調用authenticate_or_request_with_http_basic而不是調用authenticate_with_http_basic或request_http_basic_authentication,因爲前一個函數將適用於後者的所有函數。

P.S:authenticate_with_http_basic不使用POST變量,它使用頭信息獲取用戶名和密碼(request.env ['HTTP_AUTHORIZATION'])。您可以查看有關授權功能here的更多信息。

+0

確實從POST變量'username'和''password'提取authenticate_with_http_basic',就是這樣?什麼是最基本的描述? – 2011-02-24 17:33:56

+0

我也將此添加到我的文章中。簡而言之,它不使用POST變量,它使用請求頭中的request.env數據。 – 2011-02-24 17:44:01

+0

HTTP頭中的用戶名和密碼是什麼情況?登錄形式('/ session/new'或'/ login')POST到'/ session'和post變量是:'authenticity_token = TrtiGrt8CcDl9DiVbZLA6Yi24g%2FQ6qazMtOgwlJqpjc%3D&login = foo&password = 123123&remember_me = 1&commit = Log + in' so我以爲用戶登錄通常是通過POST變量? – 2011-02-24 20:39:54

3

一些細節可以節省我的時間,如果我可以在任何地方閱讀它們。

我擺弄它。 authenticate_with_http_basic只是從請求中讀取basic-auth用戶/傳遞,並在請求中存在此類信息時執行內部塊。 如果客戶端未發送任何驗證碼,則返回nil。否則它將返回塊評估的任何內容。

因此,您可以使用返回值來決定是否執行request_http_basic_authentication,返回403禁止或呈現內容。如果您是通過註冊爲before_action掛鉤的方法運行此操作,我注意到該方法的返回值被忽略。如果方法爲rendered東西或redirected,則不執行該操作。如果方法不是renderredirect,則執行操作。

HTH(談論Rails的5予以明確)

相關問題