无法过滤application_controller上的登录用户

时间:2010-10-29 19:41:04

标签: ruby-on-rails

我正在使用Ruby on Rails 2.3.8,我希望用户在访问网站上的任何内容之前登录。

我在application_controller

中写了以下内容
before_filter :login_required

当应用程序启动时,我在浏览器中遇到错误(甚至不是来自应用程序本身),说它无法重定向页面。我在网址中看到http://localhost:3000/session/new,但它不起作用。

然后,我试图将该过滤器放在另一个控制器中,例如在dashboard_controller,这是主页,它工作正常(但它只适用于此控制器,我想要它过滤整个应用程序。)

然后我开始思考,我实际上认为在路由文件中创建这两行之一的条目之前正在执行过滤器:

map.login    '/login',    :controller => 'sessions', :action => 'new'
map.signup   '/signup',   :controller => 'users',    :action => 'new'

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

我假设您正在重定向,但不排除您不想重定向的控制器操作。也就是说,您从登录页面触发了之前的过滤器。

如果是,请跳过会话控制器中的before_filter

skip_before_filter :login_required, :only => [:login, :create]

答案 1 :(得分:0)

您不希望过滤每个请求,只需要过滤需要登录用户的请求。因此,将before_filter放在需要它的每个控制器中而不是ApplicationController中。是的,这意味着会有一些重复(哦,恐怖!),但代码的意图会更清晰。