Rails, Devise Gem, аутентификация с маршрутами или в контроллере? Какой лучше? - PullRequest
3 голосов
/ 15 июля 2011

Итак, у Devise есть два метода выполнения одного и того же, во-первых, кажется, что классический способ защиты неавторизованного пользователя от доступа к действию контроллеров был бы примерно таким в моем контроллере:

before_filter :authenticate_user!

Но я видел, как это делается в routes.rb чаще, теперь тоже так:

authenticate :user do
  resources :reports
end

Какой я должен использовать?

Ответы [ 2 ]

3 голосов
/ 24 апреля 2012

Обычно я согласен, маршруты должны быть простым отображением и не содержать сложной логики. Но метод Devise (второй пример в OP), хотя, возможно, и не лучший способ защиты от несанкционированного доступа, полезен, по крайней мере, для одного очень распространенного случая использования, а именно - маршрутизация на одну «домашнюю страницу» для вошедшего в систему пользователя (например, панель инструментов) и на другую домашнюю страницу для не вошедшего в систему пользователя (например, страницу регистрации). Это стандарт IMO, достаточный для того, чтобы заслужить механизм прямой маршрутизации, который позволяет легко обрабатывать ошибки с помощью redirect_to root_path и направлять его в нужное место с помощью одного перенаправления (одна транзакция HTTP), сохраняя флэш-сообщения (которые могут скорее всего будет потеряно при втором перенаправлении внутри before_filter), без добавления большого количества дополнительного кода в ваши контроллеры.

Метод «authenticate [d]» описан очень кратко здесь

1 голос
/ 16 июля 2011

Эта логика принадлежит контроллеру, а не маршрутам. Маршруты - это то, что они есть, маршруты. Не стоит вкладывать в них какую-то логику.

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