Я использую Devise, встроенный в before_filter :authenticate_user!
. Я хочу вызвать свой собственный метод в моем помощнике приложения, если пользователь не выполнил запрос перед фильтром (пытается выполнить действие при выходе из системы). Как и где я могу это сделать?
Before_filter с разработкой
Ответ 1
Я бы написал пользовательский фильтр перед использованием 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
не перенаправляется или отображается.
Ответ 2
Вместо вызова before_filter :authenticate_user!
напишите свою собственную функцию в контроллере, которая вызывает authenticate_user!
. Что-то вроде:
before_filter :logged_in
...
private
def logged_in
your_function
authenticate_user!
end