![](/img/trans.png)
[英]What's the easiest way to detect the user's operating system in Rails 3?
[英]With Rails 3, What's the easiest way to protect an entire site from un-authenticated users?
我正在使用Devise進行網站身份驗證。 未經身份驗證的訪問者應該只能看到:歡迎頁面,注冊頁面和登錄頁面。 對於未經身份驗證的訪問者,所有其他頁面/路線都將完全不可訪問。
我看着康康,但這似乎遠遠超出了我的需要。
我看到了一些建議在Apache級別上執行此操作的建議,但要縮短Web服務器設置的使用壽命,實在是很短的路要走。
我看到一兩篇關於使用基於會話或用戶的before_filter的文章,但看來我必須修改每個控制器中的每個方法。
還有其他方法嗎? 如果我可以將我的路線標識為那些可公開訪問且需要身份驗證的路線,那就太好了。 那可能嗎? 還是可以基於current_user輕松禁用完整的控制器?
只是尋找非常簡單明了的東西。 某些錯誤會引起額外的加分。 :-)
只需在Application Controller中添加一個禁止訪問未經身份驗證的用戶的方法(使用before_filter
),然后為要向其授予訪問權限的控制器覆蓋此方法。
因此在應用程序控制器中:
before_filter :only_authenticated_users_are_welcome
def only_authenticated_users_are_welcome
!user.blank?
end
並授予訪問某些頁面及其控制器的權限:
def only_authenticated_users_are_welcome
true
end
或添加更多邏輯以僅授予對控制器內某些操作的訪問權限。
同意klew的回答,但是除了可以覆蓋only_authenticated_users_are_welcome的定義之外,您可以:
skip_before_filter :only_authenticated_users_are_welcome, :except => [:foo, :bar]
在這不應該被保護,並注意使用的控制器:除了指示其的before_filter 不應被跳過的方法。 您也可以使用:only => [:foo,:bar]表示跳過僅適用於所選方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.