我知道用户登录后我可以进行会话。另外,我创建了一个名为“current_user”的辅助方法。我不希望其他未登录的人可以访问该页面。除了做这个,我该怎么办?
我可以这样做,不允许人们访问内容,但我不希望登录中的用户也看到空白页面。
<% if current_user%>
My Content
<% end %>
答案 0 :(得分:7)
创建一个检查current_user变量是否已设置的before_filter,如果不是,则将用户重定向到其他位置(root,注册页面等)。像这样:
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 :(得分:1)
身份验证是一个微妙的领域,它是开发人员不断重新发明轮子的方面之一。我建议您使用现成的库或插件来执行此操作。特别推荐使用Authlogic插件。
它可以作为插件使用,因此您的应用中不会生成任何代码或侵入性内容。
在回答您的问题时,访问限制验证应该通过使用before_filter进入控制器,并检查它们将要执行的操作是否允许。 (过滤方法传递给控制器实例,因此被授予访问控制器所有方面的权限,并可以在它认为合适的情况下操纵它们)
但是,使用我上面提到的插件,这就像
一样简单before_filter :require_user, :except => [:list]
除了列表操作
之外,这将需要登录控制器中的所有操作答案 2 :(得分:0)
我认为如果访问控制是唯一正在处理的问题,那么before_filter是可行的方法。我不认为authlogic真的可以帮助你。但Ryan Bates还有其他访问控制宝石,如cancan,它看起来重量轻,而且非常易于使用。然后是declarative authorization。但是,如果你有一个大型应用程序,我认为before_filters可以让你获得更大的控制权。您可能有单独的模块,为每个实用程序提供访问控制。