Невозможно отфильтровать зарегистрированных пользователей в application_controller - PullRequest
1 голос
/ 29 октября 2010

Я работаю с Ruby on Rails 2.3.8 и хочу, чтобы пользователи входили в систему, прежде чем получить доступ к любому контенту с сайта.

Я написал следующее в application_controller

before_filter :login_required

Когда приложение запускается, я получаю сообщение об ошибке в браузере (даже из самого приложения) о том, что оно не перенаправило страницу. И я вижу в URL, который говорит http://localhost:3000/session/new, но это не будет работать.

Затем я попытался поместить этот фильтр в другой контроллер, например, в dashboard_controller, который является домашней страницей, и он работал нормально (но он работает только для этого контроллера, и я хочу, чтобы он фильтровал во всем приложении).

Затем я начал думать, и я на самом деле думаю, что фильтр выполняется перед созданием записи для одной из этих двух строк в файле маршрутов:

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

Любая помощь будет оценена.

Ответы [ 2 ]

3 голосов
/ 29 октября 2010

Я предполагаю, что вы перенаправляете без исключения действия контроллера, с которого вы не хотите перенаправлять.То есть, ваш фильтр перед запуском запускается со страницы входа в систему.

Если это так, пропустите before_filter в вашем контроллере сессии

skip_before_filter :login_required, :only => [:login, :create]
0 голосов
/ 30 октября 2010

Вы не хотите фильтровать каждый запрос, только те, которые требуют авторизованного пользователя. Поэтому поместите before_filter в каждый контроллер, где это требуется, а не в ApplicationController. Да, это означает, что будет некоторое дублирование (О, ужас!), Но смысл кода будет более понятным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...