Frage

Sollte die statische Seite, die für die App serviert wird, die Anmeldeseite sein?

Zweitens ist mein Server -Seitencode in Ordnung (er gibt keine Daten, die der Benutzer nicht sehen sollte). Aber wie kann ich meine App wissen, wenn der Benutzer nicht angemeldet ist, um zu einem Anmeldeformular zurückzukehren?

War es hilfreich?

Lösung

Ich habe einen Backend-Anruf, den mein clientseitiger Code, den meine statische Seite (index.php) vornimmt, zu überprüfen, ob der aktuelle Benutzer angemeldet ist api/auth/logged_in welcher HTTP -Statuscode zurückgibt 200 Wenn der Benutzer in oder angemeldet ist 400 Andernfalls (mit Cookie-basierten Sitzungen):

appController.checkUser(function(isLoggedIn){
    if(!isLoggedIn) {
        window.location.hash = "login";    
    }

    Backbone.history.start();
});

...

window.AppController = Backbone.Controller.extend({

  checkUser: function(callback) {
     var that = this;

     $.ajax("api/auth/logged_in", {
       type: "GET",
       dataType: "json",
       success: function() {
         return callback(true);
       },
       error: function() {
         return callback(false);
       }
     });
  }
});

Andere Tipps

Ich benutze das Sitzungskonzept, um den Benutzeranmeldungsstatus des Benutzers zu steuern.

Ich habe ein SessionModel und eine SessionCollection wie folgt:

SessionModel = Backbone.Model.extend({
    defaults: {
        sessionId: "",
        userName: "",
        password: "",
        userId: ""
    },

    isAuthorized: function(){
       return Boolean(this.get("sessionId"));
    }

});

Bei App Start initialisiere ich eine weltweit verfügbare Variable, Activesusion. Zu Beginn ist diese Sitzung nicht autorisiert und alle Ansichten, die an diese Modellinstanz bindung, können entsprechend rendern. Beim Anmeldeversuch habe ich mich zunächst abmelden, indem ich die Sitzung ungültig gemacht habe.

logout = function(){
    window.activeSession.id = "";
    window.activeSession.clear();
}

Dadurch wird alle Ansichten ausgelöst, die den Activesusion anhören und mein Mainview in den Anmeldemodus versetzt, in dem sie eine Anmeldeingabeaufforderung erstellt. Ich bekomme dann den Benutzernamen und das Passwort vom Benutzer und stelle sie auf die Activesion so fest:

login = function(userName, password){
    window.activeSession.set(
        {
            userName: userName,
            password: password
        },{
            silent:true
        }
    );
    window.activeSession.save();
}

Dadurch wird ein Update für den Server über Backbone.Sync ausgelöst. Auf dem Server habe ich die Sitzungsressourcen -Post -Aktion -Setup, damit sie den Benutzernamen und das Passwort überprüft. Wenn es gültig ist, wird die Benutzerdetails in der Sitzung ausgefüllt, eine eindeutige Sitzungs -ID festgelegt und das Passwort entfernt und dann das Ergebnis zurücksendet.

Mein Backbone.ync wird dann eingerichtet, um die Sitzung des Fensters hinzuzufügen. Activesession zu einer ausgehenden Anfrage zum Server. Wenn die Sitzungs -ID auf dem Server ungültig ist, sendet sie ein HTTP 401 zurück, was einen Abmeldung () auslöst, was zur Anzeige der Anmeldeaufforderung führt.

Wir sind noch nicht ganz damit fertig, dies zu implementieren, daher kann es in der Logik Fehler geben, aber im Grunde genommen nähern wir uns so. Außerdem ist der obige Code nicht unser tatsächlicher Code, da er etwas mehr Handhabungslogik enthält, sondern das Kern davon.

Ich denke, Sie sollten nicht nur die HTML -Anzeige steuern, sondern auch die Anzeigedaten steuern. Da der Benutzer Firefox verwenden kann, um Ihren JavaScript -Code zu ändern.

Für Details sollten Sie dem Benutzer ein Token geben, nachdem er sich angemeldet hat, und jedes Mal, wenn er oder sie Ihre Komponente auf Seite besucht, wie z. B. Datenraster oder Baum oder ähnliches, muss die Seite diese Daten (möglicherweise in JSON) von Ihrem Webservice abrufen. Und der WebService überprüft dieses Token. Wenn das Token falsch oder in der Vergangenheit fällig ist, sollten Sie Benutzerdaten nicht angeben, stattdessen sollten Sie eine Fehlermeldung angeben. Daher kann dieser Benutzer Ihre Sicherheit nicht knacken, selbst wenn er oder sie Firebug verwendet, um den JS -Code zu ändern.

Das könnte Ihnen helfen.

Ich glaube

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top