Elaborando la respuesta de Marcao, le recomiendo que coloque algunos debugger en su método CustomFailure responder para comprender mejor lo que está sucediendo.
Class CustomFailure < Devise::FailureApp
def respond
binding.pry
super
end
end
Si nos fijamos en la FailureApp Devise Source Code para el método responden es muy fácil de entender lo que está pasando.
def respond
if http_auth?
http_auth
elsif warden_options[:recall]
recall
else
redirect
end
end
Así, por ejemplo, con el fin de devolver un REDIRECT_URL que usted quiere asegurarse de que sus respond
condicionales código de tiempo volverá redirect
.
Sin embargo, si desea devolver un estado 401 estándar como se define en el método http_auth, quiere verificar que su código de método respond
devuelva .
Por lo tanto, vale la pena su tiempo para mirar en la definición de la http_auth?
En particular, tenga en cuenta el: Método request.xhr?
, que devolverá 0 para peticiones JSON (recuérdese que 0 evalúa en realidad para cierto en rubíes)
def http_auth?
if request.xhr?
Devise.http_authenticatable_on_xhr
else
!(request_format && is_navigational_format?)
end
end
Y tal vez verifique su archivo de inicializadores/inventarios para config.http_authenticatable_on_xhr
o config.navigational_formats
para controlar la respuesta que desea. Esta configuración realmente puede afectar lo que devuelve Devise y, a menudo, puede conducir a un comportamiento inesperado debido a lo que hace aquí bajo el capó.
¿Esto funcionó para usted? Por favor márcalo si es así. –