2009-12-13 16 views

Respuesta

16

creo que estás preguntando cómo plazo un antes filtro sólo si un usuario está conectado No hay una función de semántica para esto, pero es bastante fácil de inline:.

class SomeController < ApplicationController 
    before_filter :do_something 

    def do_something 
    if logged_in? 
     # the stuff you want to do 
    end 
    end 
end 
+0

Exactamente lo que necesitaba. – s84

+0

¿Ha quedado obsoleto en los rieles 4? – vishB

1

Si está utilizando la autenticación restful, es solo before_filter :login_required. Si está utilizando su propio marco de autenticación, puede crear un método en application.rb que devuelva verdadero si el usuario está conectado o redirecciona a la página de inicio de sesión.

18
before_filter :only_when_user_is_logged_in, :only => :the_action 

o para múltiples

before_filter :only_when_user_is_logged_in, :only => [:the_action, :another_action] 

Por otro lado, también puede proporcionar una opción :except => :this_action

+0

Este es el patrón canónico, según las guías de Rails: http://guides.rubyonrails.org/action_controller_overview.html#filters – clozach

2

Si realmente no quiere que el before_filter de ejecución de cualquiera que no sea los usuarios registrados considere usar #skip_before_filter en su filtro de autenticación. Por ejemplo, si está comprobando si los usuarios han iniciado sesión en su filtro de autenticación, si la autenticación falla, simplemente llame al skip_before_filter :filter_for_logged_in_users_only.

Aparte de eso, simplemente puede probar si el usuario ha iniciado sesión antes de ejecutar el filtro solo miembro. Por ejemplo:

def filter_for_logged_in_users_only 
    return true unless current_user && logged_in? 
    #rest of the logic 
end 
+0

cosas buenas. Gracias – s84

11

Antes de filtros toman un bloque opcional que se pasa a la instancia actual controlador por lo que podría hacer algo como esto:

before_filter :do_stuff, lambda { |controller| controller.logged_in? } 
0
class LoginsController < ApplicationController 

    skip_before_filter :require_login, :only => [:new, :create] 

end 
+0

Vaya,
,   dentro del controlador. Puede ser que estés usando tu propio editor inventado nuevo. – Rubyist