0

我一直在google搜索這一個,沒有打開任何東西有用:Rails的HTTP基本檢查認證?

假設你使用的HTTP基本驗證Rails中有一個簡單的方法來檢查,如果用戶進行身份驗證? IE瀏覽器。一種方法可以做這樣的事情在一個觀點:

- if http_basic_authenticated? 
    # show admin menu 
+0

你試過http://railscasts.com/episodes/82-http-basic-authentication? – cdesrosiers

+0

是的。這並不能讓視圖檢測用戶是否被授權。 – Andrew

回答

1

使用訪問會話參數通過您ApplicationController定義的方法。

class ApplicationController < BaseController 

... 

    def authorize 
    session[:authorized] = true 
    end 

    def http_basic_authenticated? 
    session[:authorized] 
    end 

    def end_session 
    session[:authorized] = nil 
    end 

end 

P.S.我不是安全專家,所以我不能評論在生產環境中使用它的適用性。

+0

由於SSL會話劫持不應該成爲問題,這是我能想到的唯一辦法,這將會受到影響。所以,應該像我正在做的那樣簡單。謝謝! – Andrew

0

好,因爲我知道,有沒有辦法告訴一個觀點,即請求未通過身份驗證,你能告訴認爲這是認證,但是爲什麼呢? 讓我們看看一個請求的過程:

  1. 客戶機請求
  2. 控制器
  3. 查看

,並在第二步驟中,將特定的控制器的方法,該方法是前過濾通過認證方法,也就是說,如果你可以去第三步 - 視圖,請求必須是認證

3

試試這個:

class ApplicationController < .. 

    before_filter :authenticate 

    def authenticate 
    authenticate_or_request_with_http_basic do |username, password| 
     @authenticated = username == "foo" && password == "bar" 
    end 
    end 

    def authenticated? 
    @authenticated 
    end 
    helper_method :authenticated? 

end 

現在,您可以在您的視圖中使用authenticated

請寫測試!

0

oficial code可以提取snipets使用像這樣由ApplicationController中繼承任何控制器:

class ApplicationController < BaseController 
    ... 
    protected # Only inherited controllers can call authorized? 
    def authorized? 
    request.authorization.present? && (request.authorization.split(' ', 2).first == 'Basic') 
    end 
... 
end