2010-01-23 76 views
2

我知道我可以在用戶登錄後進行會話。另外,我創建了一個名爲「current_user」的輔助方法。我不希望其他沒有登錄的人可以訪問該頁面。除了做這個,我該怎麼辦?如何在RoR中限制用戶訪問頁面?

我可以這樣做,不允許用戶訪問內容,但我不希望用戶在登錄時看到空白頁面。

<% if current_user%> 
My Content 
<% end %> 

回答

7

做,如果CURRENT_USER變量設置,檢查一個的before_filter,用戶到其他地方(根,註冊頁面,東西)重定向,如果它不是。事情是這樣的:

class ApplicationController < ActionController::Base 
    def login_required 
    redirect_to('/') if current_user.blank? 
    end 
end 

class MyController < ApplicationController 
    before_filter :login_required, :only => :action_aviable_only_for_logged_in 

    def action_aviable_only_for_logged_in 
    ... 
    end 
end 
1

認證是一個敏感的領域,這是的,開發人員不斷重新發明輪子的一個方面。我建議你使用現成的庫或插件來做到這一點。特別是我會推薦使用Authlogic插件。

它作爲一個插件工作,所以沒有生成的代碼也沒有入侵的東西進入你的應用程序。

在回答你的問題時,訪問限制驗證應該放在控制器中,通過使用before_filter並檢查它們將要執行的操作是否被允許。 (過濾方法傳遞控制器實例並因此被授予給控制器的各個方面的訪問和其認爲合適可以操縱它們)

然而,使用我高於此提到的插件將是一樣容易

before_filter :require_user, :except => [:list] 

這將需要除列表行動

0

我想的before_filter,控制器的所有行動的登錄是去,如果訪問控制是被處理的唯一問題的方式。我不認爲authlogic真的可以幫助你。但是還有其他的訪問控制寶石,比如Ryan Bates的cancan,它看起來重量輕且易於使用。然後有declarative authorization。但是,如果您有一個大型應用程序,我認爲before_filters會給您更大的控制權。您可能有單獨的模塊爲每個實用程序提供訪問控制。

相關問題