Howto sauber holen 401 in einer Backbone.js-basierten App

8

In meiner Backbone.js basierten App spreche ich mit meiner API, die mit einer 401 antwortet, falls die zugrundeliegende Anfrage ohne oder mit einem ungültigen Authentifizierungs-Token gemacht wurde. Ich möchte dies gerne instrumentieren, indem ich bei jedem Empfang eines 401 zu einer #login Seite navigiere.

Um die 401 zu holen, habe ich Backbone.sync erfolgreich verpackt, aber an diesem Punkt bleibe ich irgendwie stecken. Ich habe hier verschiedene Strategien ausprobiert:

  1. throw 'unauthorized' in Backbone :: synchronisieren und versuchen, in meinem Router zu holen. Fehlgeschlagen mit: 'Uncaught unauthorized'

  2. Ich versuche, #.navigate '#login' down in Backbone :: sync zu finden, was nicht nur seltsam aussieht, sondern auch das Problem, dass meine App auf AMD / require.js basiert und ich nicht einfach auf meine Backbone.Router-Instanz zugreifen kann in meiner eingepackten Funktion sync .

Die einzige Lösung, die ich bisher gesehen habe, wäre, ein "global verfügbares" Caching-Objekt zu erstellen, das einen Verweis auf meine Router-Instanz erhält und wiederum in define als Abhängigkeit verwendet wird, wo es benötigt wird. Dieses Cache-Objekt musste ein Singleton sein und brach meine ganze "Bitte-Nein-Globals-und-Namespaces" -Strategie.

Ich bin hier irgendwie festgefahren. Kann mir jemand auf eine sauberere Lösung dieses häufigen Problems hinweisen?

    
GeorgieF 12.11.2012, 10:13
quelle

2 Antworten

8

Sie können die Umleitung in ajaxError tun:

%Vor%

Wenn alles richtig eingerichtet ist, müssen Sie nicht manuell auf die Router-Instanz zugreifen. Wenn Sie diese URL aufrufen, sollte die damit verknüpfte Routenfunktion ausgelöst werden.

    
Andrei Rosca 12.11.2012, 11:53
quelle
3

Für diejenigen, die jQuery 1.8 oder höher verwenden, hat sich die Syntax geändert:

%Vor%

Weitere Informationen finden Sie im jQuery-Handbuch .

    
AdrianGW 02.03.2015 00:46
quelle