2012-10-02 782 views
6

Tengo una aplicación donde los usuarios tienen una membresía que vence.Obligar a los usuarios a cerrar sesión en Devise

Estoy trabajando para configurar un before_filter en mi archivo applications.rb para verificar que la membresía esté activada antes de permitir que entren en el sitio.

En mi archivo application.rb:

before_filter :check_account 

def check_account 
    if user_signed_in? 
    if current_user.account.expired 
     flash[:error] = "Your account is expired. Please contact Navanti for renewal." 
     redirect_to destroy_user_session_path 
    end 
    end 
end 

sigo obteniendo un error de bucle de redireccionamiento. Supongo que es porque la página de cierre de sesión a la que se llama también está haciendo el before_filter, pero si pongo un except => [:users => :sign_out], aún arroja el error de bucle.

Gracias por la ayuda.


solicitada Diseñar Método:

# DELETE /resource/sign_out 

def destroy 
    redirect_path = after_sign_out_path_for(resource_name) 
    signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name)) 
    set_flash_message :notice, :signed_out if signed_out && is_navigational_format? 

    # We actually need to hardcode this as Rails default responder doesn't 
    # support returning empty response on GET request 
    respond_to do |format| 
    format.any(*navigational_formats) { redirect_to redirect_path } 
    format.all do 
     head :no_content 
    end 
    end 
end 
+1

Escriba el código para destroy_user_session_path. – alex

+0

sí, por favor ponga el código de destrucción aquí –

+0

Ese código proviene de la gema Devise. Trataré de encontrarlo y agregarlo a la pregunta. – matthewvb

Respuesta

7

Trate consultar el controlador/acción de la siguiente manera:

def check_account 
    return if params[:controller] == "devise/sessions" && params[:action] == "destroy" 
    if user_signed_in? 
    if current_user.account.expired 
     flash[:error] = "Your account is expired. Please contact Navanti for renewal." 
     redirect_to destroy_user_session_path 
    end 
    end 
end 

Esto debería eliminar el bucle de redireccionamiento que está teniendo.

+0

Gracias Erez, eso funcionó muy bien. Tengo un problema de seguimiento que estoy notando pero lo pondré en otra pregunta. – matthewvb

Cuestiones relacionadas