2014-10-09 2 views
3

Я использую программу для проверки подлинности в приложении Rails 4. Почти для всех приложений требуется аутентификация пользователя, однако есть несколько «общедоступных» страниц («Условия» - такие вещи).Как сделать общедоступную страницу в приложении, использующем devize

. Разработчик сам делает sign up и sign in страницами public, используя prepend_before_filter :require_no_authentication. Однако этот метод is intended only for devise controllers. И разработка, похоже, не обеспечивает «правильный» способ обнародования отдельных действий.

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

единственным способом я могу думать так далеко:

  1. Чтобы сделать новый public пространство имен, и имеют отдельные контроллеры для общественных действий, которые наследуют от PublicController, который не выполняет before_filter :authenticate_user!

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

Есть ли лучший способ сделать индивидуальные действия общедоступными с помощью разработки?

ответ

3

Вы можете дополнительно использовать skip_before_action для публичных контроллеров. Пример от guides:

class LoginsController < ApplicationController 
    skip_before_action :require_login, only: [:new, :create] 
end 
+0

Это именно то, что мне нужно! Благодарю. –

+0

@Pedro Скопируйте/вставьте соответствующую информацию из ссылки в свой ответ. – Substantial

+0

@ Существенный сделано :) – pedrofs

4

В контроллере, вы хотите иметь:

before_action :authenticate_user!, :except => [:index] 

Это будет выполнять метод :authenticate_user! обо всех действиях, за исключением index действий. Дополнительное объяснение можно найти в этом answer.

+0

Это будет работать, если я выполнял: authenticate_user! на основе каждого контроллера, но на данный момент он находится в моем суперклассе. –

+0

@ joshua.paling Я не знаю вашу структуру, но когда я делаю такие страницы, как «Условия условий» или '' О'', я создаю отдельный контроллер для всех общедоступных страниц. –

+0

Да, он абсолютно прав, '' skip_before_action'' - это то, что вам нужно. Извините за ложный ответ, я не знал, что у вас есть '' authentication_user! '' В суперклассе –

Смежные вопросы