before_filter с устройством

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


person user730569    schedule 17.05.2011    source источник
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
comment
могу ли я поместить метод в свой контроллер приложений? - person user730569; 17.05.2011
comment
Если вы планируете использовать фильтр «до» в нескольких контроллерах, каждый из которых расширяет 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