2016-10-03 4 views
0

Ich konfiguriere meinen Backbone-Router mit verschiedenen Ansichten. Aber bei einigen Ansichten muss ich eine Sammlung holen. Wenn der Benutzer nicht angemeldet ist, gibt der Server einen HTTP-Status 401 zurück.Wie behandelt man eine 401 nicht autorisierte Antwort mit Backbone?

So konfigurieren ich globale Ajax-Einstellungen des jQuery wie folgt aus:

$.ajaxSetup({ 
    xhrFields: { 
     withCredentials: true 
    }, 
    crossDomain: true, 
    error: function(jqXHR, textStatus, errorThrown) { 
     console.log("error ajax"); 
     if (jqXHR.status == 401) { 
      console.log('error 401'); 
      app.router.navigate('', { trigger: true }); 
     } 
    } 
}); 

Aber es geht nie in den Fehler-Callback, auch wenn der Antwortcode ist 401.

Antwort

1

Stattdessen werden die Ajax-Optionen global zu modifizieren , Habe ich Funktion geändert, um Authentifizierung zu behandeln.

Backbone.sync = (function(syncFn) { 
    return function(method, model, options) { 
     options = options || {}; 

     var beforeSend = options.beforeSend, 
      error = options.error; 

     // Add headers 
     options.beforeSend = function(xhr) { 
      xhr.setRequestHeader('withCredentials', true); 
      if (beforeSend) return beforeSend.apply(this, arguments); 
     }; 

     // handle unauthorized error (401) 
     options.error = function(xhr, textStatus, errorThrown) { 
      console.log("error sync"); 
      if (error) error.call(options.context, xhr, textStatus, errorThrown); 
      if (xhr.status === 401) { 
       console.log('error 401'); 
       app.router.navigate('', { trigger: true }); 
      } 
     }; 

     return syncFn.apply(this, arguments); 
    }; 
})(Backbone.sync); 
+0

Danke @Emile. Es läuft gut. –

Verwandte Themen