如果用户未登录,则重定向到登录页面

时间:2011-02-20 10:32:07

标签: ruby-on-rails

如果他未登录,我希望我的用户被重定向到登录表单吗?

问题是我不想为每一个动作做这件事。我知道有一种方法可以让我只为每个控制器定义一次(即无论控制器中的动作如何都会执行),但我不记得是怎么做的。

4 个答案:

答案 0 :(得分:46)

使用before_filter。将以下内容放在应用程序控制器中。

# application_controller.rb

before_filter :require_login

private

  def require_login
    unless current_user
      redirect_to login_url
    end
  end

上面的代码假定您已经定义了一个方法current_user,该方法在用户登录时返回用户记录。

然后,在您的登录控制器中

skip_before_filter :require_login

答案 1 :(得分:4)

如果您希望仅在特定控制器上重定向登录,请使用:

skip_before_filter :require_login, :only=>[:edit,:update] 

或:

skip_before_filter :require_login, :except=>[:new,:create]

答案 2 :(得分:0)

在action_controller.rb中作为before_filter。

答案 3 :(得分:0)

如果您使用的是 devise,您可以向控制器添加一个 before_action 助手

before_action :authenticate_user!

https://github.com/heartcombo/devise#controller-filters-and-helpers