С Rails 3, какой самый простой способ защитить весь сайт от неаутентифицированных пользователей? - PullRequest
1 голос
/ 16 апреля 2011

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

Я посмотрел на Канкан, но это кажется намного, гораздо больше, чем мне нужно.

Я увидел что-то еще, что предлагало сделатьэто на уровне Apache, но жизнь слишком коротка, чтобы копаться в настройках веб-сервера.

Я видел одну или две статьи об использовании сеанса или пользователя на основе before_filter, но похоже, что мне придетсяизменить каждый метод в каждом контроллере.

Есть ли другой подход?Было бы здорово, если бы я мог идентифицировать свои маршруты как общедоступные и те, которые требуют аутентификации.Это возможно?Или я могу легко отключить полный контроллер на основе current_user?

Просто ищу что-то очень простое и понятное.Дополнительный кредит за то, что ошибки - изящно.: -)

Ответы [ 2 ]

3 голосов
/ 16 апреля 2011

Просто добавьте метод в Application Controller, который запрещает доступ неаутентифицированным пользователям (используя before_filter), и перезапишите этот метод для контроллеров, для которых вы хотите предоставить им доступ.

Так в контроллере приложения:

before_filter :only_authenticated_users_are_welcome

def only_authenticated_users_are_welcome
  !user.blank?
end

А для предоставления доступа к некоторым страницам и в их контроллере:

def only_authenticated_users_are_welcome
  true
end

Или добавьте еще немного логики для предоставления доступа только к некоторым действиям в контроллере.

2 голосов
/ 22 апреля 2011

Согласитесь с ответом klew, но вместо переопределения определения only_authenticated_users_are_welcome, вы можете:

skip_before_filter :only_authenticated_users_are_welcome, :except => [:foo, :bar]

в контроллерах, которые должны * не быть защищенными, и отметить использование: кромечтобы указать методы, для которых before_filter должен не быть пропущен.Вы также можете использовать: only => [: foo,: bar], чтобы указать, что пропуск должен only для выбранных методов.

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