tutorial rails example español ejemplos ruby-on-rails devise before-filter

ruby on rails - rails - ¿Cómo omitir un before_filter para Devise''s SessionsController?



devise wiki (7)

Tengo un before_filter en mi ApplicationController ; Es decir, para cada controlador en mi proyecto.

¿Cómo puedo skip_before_filter para la acción de creación SessionsController de Devise?


nueva respuesta

¿Qué hay de envolver el before_filter en un filtrado de bloque a menos que params[:controller]

def some_before_action unless params[:controller] == "sessions_controller_for_devise_name" ... #=> do the stuff here end end

vieja respuesta

Solo autoriza cuales acciones deben usar el filtro anterior.

before_filter :action, :only => ...

y autoriza a los demás.

Encontré esto aquí


Antes de que mi colega me mostrara la forma en que publiqué en mi otra respuesta, hice esto. Estoy publicando esto en caso de que pienses que es más simple.

class ApplicationController < ActionController::Base # ... before_filter :do_something def do_something unless params[:controller] == ''devise/sessions'' # ... end end end


Aquí hay otra forma en lib / devise_sessions_controller_decorator.rb:

module DeviseSessionsControllerDecorator extend ActiveSupport::Concern included do skip_before_filter :your_filter_name end end Devise::SessionsController.send(:include, DeviseSessionsControllerDecorator)

Debido a que las clases no se almacenan en caché en el modo de desarrollo, es posible que deba agregar algo como esto a config / environment / development.rb:

config.to_prepare do Devise::SessionsController.send(:include, DeviseSessionsControllerDecorator) end


Aquí hay un método que mi colega me acaba de mostrar:

# In config/application.rb module YourAppNameHere class Application < Rails::Application # Whatever else is already here... # The part to add config.to_prepare do Devise::SessionsController.skip_before_filter :your_before_filter_here end end end


Hicimos algo como esto:

En primer lugar, crea tu propio controlador de sesión, asegúrate de heredar correctamente:

class SessionsController < Devise::SessionsController skip_before_filter :foobar

Entonces arregla las rutas

devise_for :users, :controllers => { :sessions => "sessions" }

Alternativamente, podrías parchear el controlador de sesión de Devise.


Recientemente tuve este problema con el filtro en mi skip_before_filter application_controller lo resolví usando skip_before_filter

skip_before_filter :check_subdomain!, if: :devise_controller?


Simplemente puede verificar en su método de filtro si es un controlador de dispositivo o no.

if params[:controller] != ''devise/sessions''