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

22

如果用户未登录,我希望将用户重定向到登录表单页面。

问题是我不想在每个操作中都这样做。我知道有一种方法可以仅在每个控制器中定义一次这个行为(即无论控制器中的操作如何执行,都会有一个操作被执行),但我记不清楚该怎么做了。


你想让它只在选择的控制器/操作上运行吗? - Dogbert
没有,一无所有。你有更好的解决方案吗? - Alex
1
将用户未登录时重定向到登录页面的方法 - cam
4个回答

51

使用before_action。将以下内容放置在您的应用程序控制器中。

# application_controller.rb

before_action :require_login

private

  def require_login
    unless current_user
      redirect_to login_url
    end
  end

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

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

skip_before_action :require_login


如果我有很多控制器和每个控制器中的动作,其中一些需要登录,而另一些则不需要,那么这种方法就行不通了,对吧?并非所有的动作都需要登录。还有其他方法吗? - Victor Pudeyev
1
@VictorPiousbox skip_before_filter 接受 if/unless/only/except 选项。 - Simone Carletti

5

如果您希望仅将登录重定向到特定控制器,则使用以下方法:

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

或者:

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

0
在你的 action_controller.rb 中作为一个 before_filter。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接