Before_filter с разработкой

Я использую Devise, встроенный в before_filter :authenticate_user!. Я хочу вызвать свой собственный метод в моем помощнике приложения, если пользователь не выполнил запрос перед фильтром (пытается выполнить действие при выходе из системы). Как и где я могу это сделать?

Ответ 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