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

问题描述

| 我正在使用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]
在不应受到保护的控制器中,请注意使用:except表示不应跳过before_filter的方法。您也可以使用:only => [:foo,:bar]表示跳过仅适用于所选方法。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...