2013-03-12 5 views
1

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

https://github.com/plataformatec/devise/wiki/How-To:-Require-authentication-for-all-pages

Я copiy вставили это:

authenticated :user do 
    root :to => 'home#index' 
end 
root :to => redirect('/users/sign_in') 

Как я могу добиться этого очень естественной функции ?

+0

Не могли бы вы объяснить больше, какая часть не работает для вас? Не перенаправляет ли он на страницу входа? Вы перезапустили сервер, чтобы изменения в маршрутах повлияли? –

+0

Это не перенаправляет меня на страницу входа. Я могу получить доступ к каждой странице, не войдя в систему. Да, я попытался перезапустить сервер. – rastko

+1

https://github.com/plataformatec/devise#controller-filters-and-helpers вам нужно использовать before_filter для этого –

ответ

1

Вот что я сделал:

В app/controllers/application_controller.rb добавьте строку следующим образом:

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 

    before_action :authenticate_user! 

    # ... 
end 

Это заставит authenticate_user! бежать перед любым действием.

Если у вас есть какие-то действия/контроллеры, которые не требуют аутентификации, вы можете добавить следующую строку в свой файл контроллера:

class StaticPagesController < ApplicationController 
    prepend_before_filter :require_no_authentication 

    # ... 
end 

require_no_authentication функция также принимает необязательный параметр, массив с именем only, который содержит список действий, которые не требуют аутентификации.

n.b. Я знаю, что это продвинутая некромантия, но вопрос остался без ответа, и я провел немало времени, преследуя правильный ответ.

+0

Я думаю, что функция require_no_authentication доступна только в контроллерах, которые наследуют от разработки, поэтому это не работает для меня с других контроллеров – TaimoorQ