Я использую встроенный в Devise before_filter :authenticate_user!
. Я хочу вызвать свой собственный метод в моем помощнике приложения, если пользователь не проходит фильтр перед (пытается выполнить действие при выходе из системы). Как и где я могу это сделать?
before_filter с устройством
comment
Вы изучаете возможность использования CanCan для авторизации.
- person Austin Taylor   schedule 17.05.2011
Ответы (2)
Я бы написал собственный фильтр перед тем, как использовать user_signed_in?
. Это просто вернет логическое значение и не выполнит никаких действий типа перенаправления, которые выполняет authenticate_user!
.
Итак, вы можете написать фильтр перед следующим образом:
before_filter :custom_user_auth
...
def custom_user_auth
unless user_signed_in?
# Do custom stuff, ultimately restricting access to the
# ...protected resource if it needs to be
end
end
Обратите внимание, что этот предварительный фильтр не защитит ваш ресурс от неавторизованных пользователей, если только внутренняя область этого оператора unless
не перенаправляет или не отображает.
person
andrewmitchell
schedule
17.05.2011
могу ли я поместить метод в свой контроллер приложений?
- person user730569; 17.05.2011
Если вы планируете использовать фильтр «до» в нескольких контроллерах, каждый из которых расширяет ApplicationController, я бы определил функцию там. Однако я бы определенно не стал помещать строку
before_filter
в контроллер приложения, поскольку вы, вероятно, захотите использовать ее только в определенных случаях.
- person andrewmitchell; 17.05.2011
Вместо вызова before_filter :authenticate_user!
напишите в контроллере свою функцию, которая вызывает authenticate_user!
. Что-то типа:
before_filter :logged_in
...
private
def logged_in
your_function
authenticate_user!
end
person
chrismealy
schedule
17.05.2011