使用Rails 3,保护整个站点免受未经身份验证的用户的最简单方法是什么?

时间:2011-04-15 23:16:06

标签: ruby-on-rails authentication routes

我正在使用Devise对我的网站进行身份验证。未经身份验证的访问者应该只能看到:欢迎页面,注册页面和登录页面。对于未经身份验证的访问者,所有其他页面/路线都将完全无法访问。

我看着康康,但这看起来比我需要的多得多。

我看到了其他一些建议在Apache级别上做这件事的事情,但生活方式很短暂,无法通过Web服务器设置进行处理。

我在使用基于会话或用户的before_filter时看到了一两篇文章,但看起来我必须修改每个控制器中的每个方法。

还有其他方法吗?如果我可以将我的路线识别为可公开访问的路由以及需要身份验证的路由,那将会很棒那可能吗?或者我可以根据current_user轻松禁用完整的控制器吗?

只是寻找非常简单和直接的东西。对于那些错误优雅的东西的额外功劳。 : - )

2 个答案:

答案 0 :(得分:3)

只需向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

或添加更多逻辑以仅授予对控制器内某些操作的访问权限。

答案 1 :(得分:2)

同意klew的回答,但您可以:

而不是覆盖only_authenticated_users_are_welcome的定义。
skip_before_filter :only_authenticated_users_are_welcome, :except => [:foo, :bar]

在应该受保护的控制器中,并注意使用:除了指示before_filter应该被跳过的方法。您还可以使用:only => [:foo,:bar]表示跳过适用于所选方法。