Ich versuche Anmeldefehler Ereignisse auf einem Gerät AJAX Anmeldeformular zu erhalten. Ich habe die devise Sitzungen Controller wie so überschrieben:Devise Ajax Anmeldung Fehler bei der Handhabung auf Schienen 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
die json bei einem Fehler nie wirklich löst auf einem 401 unauthorized Antwort. Die js on sign_in_and_redirect funktioniert jedoch gut.
ist hier der Abschnitt meines js, wo ich eine Warnung erwarten zeigen:
$(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 - also ich es geschafft, durch Überprüfung für data.status == 200
statt data.success
das gewünschte Verhalten zu erhalten ... Ich bin immer noch fragen, Wenn das der richtige Weg ist, oder wenn ich etwas vermisse
Was passiert, wenn Sie 'return alert (XHR)', bevor Sie 'Block if' – Jonathan
versuchen Sie auch' '.bind'ing ajax: complete "und setze das Ergebnis stattdessen dort ein z.B. '.on ('ajax: complete', Funktion (e, xhr, Status, Fehler) {alert (xhr);});' – Jonathan
Aktualisierter Status zu Ihrem Problem? – Jonathan