0

我有一个“登录”功能 - :controller => "sessions" , :action => "new"

我还编辑了 :controller => "application" 以便如果我在网站上的任何地方并且我没有登录 - 我将被重定向到根路径:

before_filter :login_required
protected
  def login_required
    redirect_to "/" if not session[:user]
end

但问题是现在我无法进入登录页面。

它曾经是 localhost:3000/sessions/new

我认为更改根路径会有所帮助,所以我将其添加到 routes.rb 中:

match '/', :controller => 'sessions', :action => 'new'

之后 localhost:3000 开始在浏览器中给出错误“错误转发”。

我也不想将“/sessions/new/”作为我的默认位置。

有没有办法,当我转到“/”时 - 查看“/sessions/new/”的内容并且仍然将我的保护代码保留在应用程序控制器中?

4

2 回答 2

1

您可以使用

skip_filter :login_required, :only => [:new]

在 SessionController 中跳过 :new 操作的过滤器。此外,您可以通过以下方式匹配“/”:

 root :to => 'sessions#new'
于 2012-11-25T19:15:43.187 回答
1

除了使用上述的 skip_filter 方法外,还可以考虑使用 Devise gem 进行用户身份验证,而不是自己滚动,除非您有充分的理由这样做。

于 2012-11-25T21:59:42.987 回答