Question

Tout d'abord, si la page statique qui est servi pour l'application est la page de connexion?

En second lieu, mon code côté serveur est très bien (il ne donnera aucune donnée que l'utilisateur ne doit pas être en mesure de voir). Mais comment puis-je faire mon savoir app que si l'utilisateur n'est pas connecté, pour revenir à un formulaire de connexion?

Était-ce utile?

La solution

J'ai un appel backend que mon code côté client que ma page statique (index.php) permet de vérifier si l'utilisateur actuel est connecté. Disons que vous avez un appel backend à api/auth/logged_in qui renvoie le code d'état HTTP 200 si l'utilisateur est connecté ou 400 autrement (en utilisant des sessions basées sur les cookies):

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);
       }
     });
  }
});

Autres conseils

J'utilise le concept de session pour le contrôle état de connexion de l'utilisateur.

J'ai un SessionModel et SessionCollection comme ceci:

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

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

});

Au démarrage de l'application, j'initialiser une variable disponible au niveau mondial, activeSession. Au début de cette session est non autorisée et des vues de liaison à cette instance de modèle peut rendre en conséquence. Sur la tentative de connexion, je suis en invalidant la fermeture de session session.

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

Cela déclenchera des vues qui écoutent la activeSession et je mettrai mes MainView en mode de connexion où il va mettre une connexion rapide. Je puis obtenir l'identifiant et le mot de passe de l'utilisateur et les mettre sur le activeSession comme ceci:

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

Cela déclenchera une mise à jour au serveur via backbone.sync. Sur le serveur, j'ai la ressource de la session configuration d'action POST afin qu'il vérifie le nom et le mot de passe. Si elle est valide, il remplit les détails de l'utilisateur sur la session, définit un identifiant de session unique et supprime le mot de passe et puis renvoie le résultat.

Mon backbone.sync est alors configuré pour ajouter le sessionId de window.activeSession à toute demande sortante au serveur. Si la session Id est non valide sur le serveur, il renvoie un HTTP 401, ce qui déclenche un logout (), conduisant à la projection de l'invite de connexion.

Nous ne sommes pas tout à fait fait application de ce moment, donc il peut y avoir des erreurs dans la logique, mais au fond, cela est la façon dont nous l'abordons. En outre, le code ci-dessus n'est pas notre code réel, car il contient un peu plus logique de gestion, mais il est l'essentiel.

Je pense que vous ne devriez pas contrôler uniquement l'affichage html mais aussi contrôler les données d'affichage. Parce que l'utilisateur peut utiliser Firefox pour changer votre code javascript.

Pour plus de détails, vous devez donner utilisateur un jeton après avoir connecter et à chaque fois qu'il ou elle visite votre composant en page, comme grille de données ou d'un arbre ou quelque chose comme ça, la page doit chercher ces données (peut-être en JSON) de votre webservice et le webservice vérifiera ce jeton, si le jeton est incorrect ou échues vous ne devriez pas fournir des données d'utilisateur à la place, vous devez donner un message d'erreur. Pour que l'utilisateur ne peut pas casser votre sécurité, même s'il ou elle utiliser Firebug au code de changement.

Cela pourrait être utile pour vous.

Je pense que vous devriez faire ce serveur recto seulement ... Il y a beaucoup de chances de l'obtenir piraté unité et à moins que vous avez une sorte de api étonnant y répondre

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top