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

Ruby on rails 如果用户未登录,则重定向到登录页面,ruby-on-rails,Ruby On Rails,如果我的用户没有登录,我希望他被重定向到登录表单 问题是我不想每次都这样做。我知道有一种方法可以让我只为每个控制器定义一次(即,无论控制器中的操作如何,某些东西都会执行),但我不记得是如何定义的。在您的操作中\u controller.rb作为一个before\u过滤器。使用。将以下内容放入应用程序控制器中 # application_controller.rb before_filter :require_login private def require_login unl

如果我的用户没有登录,我希望他被重定向到登录表单


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

在您的操作中\u controller.rb作为一个before\u过滤器。

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

# 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
before_action :authenticate_user!

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

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


如果您使用的是Desive,则可以向控制器添加before_action助手

skip_before_filter :require_login
before_action :authenticate_user!

是否只在选定的控制器/操作上运行?不,在所有控制器/操作上运行。你有更好的解决方案吗?谢谢!你的帖子很有用!如果我有很多控制器和动作在其中,有些需要登录,有些不需要登录,这就行不通了是吗?并非所有操作都需要登录。还有其他方法吗?@VictorVictorBox在过滤器接受if/except/only/except选项之前跳过。