Sto tentando di ricevere eventi di errore di accesso su un modulo di login AJAX elaborato. Ho sovresposta il controller sessioni testamentaria in questo modo:escogitare un segno ajax nella gestione degli errori su binari 4
class SessionsController < Devise::SessionsController
def create
resource = warden.authenticate!(:scope => resource_name, :recall => '#{controller_path}#failure')
sign_in_and_redirect(resource_name, resource)
end
def sign_in_and_redirect(resource_or_scope, resource=nil)
scope = Devise::Mapping.find_scope!(resource_or_scope)
resource ||= resource_or_scope
sign_in(scope, resource) unless warden.user(scope) == resource
return render :json => {:success => true}
end
def failure
return render :json => {:success => false, :errors => ["Login failed."]}
end
end
il JSON in caso di fallimento innesca mai realmente su una risposta non autorizzati 401. Il js su sign_in_and_redirect funziona bene però.
Ecco la sezione del mio js dove mi aspetta un avviso per mostrare:
$(document).on('click', '#login-btn', function(){
$("#login-modal").toggleClass("is-active");
$("form#login_user_form").bind("ajax:success", function(e, data, status, xhr) {
if (data.success) {
$("#login-modal").toggleClass("is-active");
} else {
return alert('failure!'); // this never happens
}
});
});
EDIT - così sono riuscito a ottenere il comportamento desiderato controllando per data.status == 200
invece di data.success
... io non so ancora se questo è il modo giusto per farlo o se mi manca qualcosa
Cosa succede quando si 'avviso di ritorno (XHR)' 'prima della if' bloccare – Jonathan
prova anche a' '.bind'ing ajax: complete' e inserendo il risultato lì per esempio. '.on ('ajax: completa', funzione (e, xhr, stato, errore) {alert (xhr);});' – Jonathan
Qualunque stato aggiornato sul problema? – Jonathan