42 votes

backbone.js - traitement si un utilisateur est connecté ou non

Tout d'abord, la page statique servie pour l'application doit-elle être la page de connexion?

Deuxièmement, mon code côté serveur est correct (il ne donnera aucune donnée que l’utilisateur ne devrait pas pouvoir voir). Mais comment faire savoir à mon application que si l'utilisateur n'est pas connecté, il doit revenir à un formulaire de connexion?

70voto

Jens Alm Points 2379

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

J'ai un SessionModel et SessionCollection comme ceci:

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

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

});

Sur l'app début, j'initialise un monde de variables disponibles, activeSession. Au début de cette session est autorisée et toutes les opinions se liant à cette instance du modèle peut rendre en conséquence. Sur la tentative de connexion, j'ai d'abord déconnexion en invalidant la session.

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

Cela va déclencher tout point de vue que d'écouter de la activeSession et sera mis mon mainView en mode de connexion où il va mettre en place une invite de connexion. J'ai ensuite le nom d'utilisateur et le mot de passe de l'utilisateur et de les fixer sur le activeSession comme ceci:

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

Cela va déclencher une mise à jour pour le serveur par le biais de la colonne vertébrale.la synchronisation. Sur le serveur, j'ai la session de ressources action POST de l'installation afin qu'il vérifie le nom d'utilisateur et mot de passe. Si elle est valable, il remplit les détails de l'utilisateur de la session, définit un id de session unique et supprime le mot de passe, puis envoie le résultat en retour.

Ma colonne vertébrale.la synchronisation est alors le programme d'installation pour ajouter l'id de session de la fenêtre.activeSession à toute sortant requête au serveur. Si l'Id de session n'est pas valide sur le serveur, il renvoie une erreur HTTP 401, ce qui déclenche un logout(), conduisant à la présentation de l'invite de connexion.

Nous ne sommes pas tout à fait terminé la mise en œuvre de cette encore, il peut donc y avoir des erreurs dans la logique, mais, fondamentalement, c'est la façon dont on l'approche. Aussi, le code ci-dessus n'est pas de notre code, car il contient un peu plus de logique, de traitement, mais c'est l'essentiel.

14voto

Sam Points 1347

J'ai un appel backend que mon code côté client fait par ma page statique (index.php) pour vérifier si l'utilisateur actuel est connecté. Supposons que vous ayez un appel backend à api/auth/logged_in qui renvoie le statut HTTP Code 200 si l'utilisateur est connecté ou 400 sinon (en utilisant des sessions basées sur des 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);
       }
     });
  }
});
 

5voto

Tausif Khan Points 697

2voto

Alex Yang Points 19

Je pense que vous ne devriez pas seulement de contrôler l'affichage html, mais aussi de contrôler l'affichage des données. Parce que l'utilisateur peut utiliser firefox pour modifier votre code javascript.

Pour plus de détails, vous devriez donner à l'utilisateur un jeton d'après le journal et chaque fois qu'il ou elle visite votre composant en page tels que la grille de données ou un arbre ou quelque chose comme ça, la page doit aller chercher ces données (peut-être en json) à partir de votre webservice, et le webservice vais vérifier de cette manière, si le jeton est incorrecte ou en souffrance, vous ne devriez pas donner à l'utilisateur des données au lieu de cela, vous devriez donner un message d'erreur. De sorte que l'utilisateur ne peut pas casser votre sécurité, même si il ou elle utiliser firebug pour le changement du code js.

Que peut-être vous aider.

-14voto

demonace Points 1

Je pense que vous devriez faire ce serveur côté uniquement ... Il y a beaucoup de chances que l'unité soit piratée et à moins que vous n'ayez une sorte d'api incroyable à y répondre

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X