2011-05-17 14 views
10

Estoy usando Devise's built in before_filter :authenticate_user!. Quiero llamar a mi propio método personalizado en mi asistente de aplicaciones si un usuario falla el filtro anterior (intenta realizar una acción cuando se cierra la sesión). ¿Cómo y dónde puedo hacer esto?before_filter con el dispositivo

+0

Considera utilizar CanCan para obtener autorización. –

Respuesta

6

Escribo un filtro personalizado antes que usa user_signed_in?. Esto solo devolverá un booleano y no realizará ninguna de las acciones de redirección que hace authenticate_user!.

Por lo tanto, se podría escribir un filtro antes de la siguiente manera:

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 

tenga en cuenta que esto antes filtro no protegerá su recurso de usuarios no autorizados a menos que el área dentro de esa declaración unless redirige o presta.

+0

¿Puedo poner el método en mi controlador de aplicación? – user730569

+0

Si planea utilizar el filtro anterior en varios controladores, cada uno de los cuales amplía el ApplicationController, entonces definiría la función allí. Sin embargo, definitivamente no pondría la línea 'before_filter' en el controlador de la aplicación, ya que probablemente solo quiera usar esto en ciertas instancias. – andrewmitchell

7

En lugar de llamar al before_filter :authenticate_user!, escriba su propia función en su controlador que llame al authenticate_user!. Algo como:

before_filter :logged_in 

... 

private 
def logged_in 
    your_function 
    authenticate_user! 
end 
Cuestiones relacionadas