所以Devise似乎有两种方法可以完成同样的事情,首先,保护未经授权的用户访问控制器动作的经典方法似乎在我的控制器中是这样的:
before_filter :authenticate_user!
但我现在更频繁地在routes.rb
看到这样做了,现在也是如此:
authenticate :user do
resources :reports
end
我应该使用哪一个?
答案 0 :(得分:3)
通常我同意,路由应该是一个简单的映射,不包含复杂的逻辑。但是,Devise方法(OP中的第二个示例)虽然可能不是防止未授权访问的最佳方法,但对于至少一个非常常见的用例(即,为签名用户路由到一个“主页”)非常有用(例如, ,仪表板),以及非签名用户的另一个主页(例如,注册页面)。这是IMO标准足以值得直接路由机制,它允许您使用redirect_to root_path轻松处理错误,并使用单个重定向(一个HTTP(s)事务)将其转到正确的位置,保留闪存消息(这将可能会在before_filter中的第二次重定向中丢失,而不会在控制器中添加大量额外代码。
“authenticate [d]”方法非常简洁here
答案 1 :(得分:1)
该逻辑属于控制器,而不属于路由。路线正是它们的路线。把一些逻辑放进去是不好的。