Backbone.js - обработка, входит ли пользователь в систему или нет

StackOverflow https://stackoverflow.com/questions/5808655

Вопрос

Во -первых, должна ли статическая страница, которая обслуживается для приложения, быть страницей входа в систему?

Во -вторых, мой код на стороне сервера в порядке (он не дает никаких данных, которые пользователь не должен видеть). Но как мне узнать, что мое приложение узнает, что если пользователь не вошел в систему, чтобы вернуться в форму входа в систему?

Это было полезно?

Решение

У меня есть бэкэнд-вызов, который мой код на стороне клиента, который делает моя статическая страница (index.php), чтобы проверить, вошел ли текущий пользователь. Допустим, у вас есть бэкэнд-вызов в api/auth/logged_in который возвращает код состояния HTTP 200 Если пользователь вошел в систему или 400 В противном случае (используя сеансы на основе печенья):

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

Другие советы

Я использую концепцию сеанса для управления состоянием входа в систему пользователя.

У меня есть сеанс -модель и сеанс, как это:

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

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

});

При запуске приложения я инициализую глобально доступную переменную ActiveSession. При начале этот сеанс неавторизован, и любые представления, связанные с этим экземпляром модели, могут выполнять соответствующим образом. При попытке входа в систему я сначала входит в систему, признав аннулирование сеанса.

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

Это запустит любые представления, которые слушают ActiveSession и введет мой MainView в режим входа в систему, где он будет выдвигать подсказку для входа в систему. Затем я получаю имя пользователя и пароль от пользователя и установил их на ActiveSession, как это:

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

Это запустит обновление на сервере через Backbone.sync. На сервере у меня есть настройка действия ресурса сеанса, чтобы он проверял имя пользователя и пароль. Если действителен, он заполняет данные пользователя в сеансе, устанавливает уникальный идентификатор сеанса и удаляет пароль, а затем отправляет результат.

My Backbone.sync затем настроена на добавление SessionId windows.Activessession к любому исходящему запросу на сервер. Если идентификатор сеанса недействителен на сервере, он отправляет обратно HTTP 401, который запускает logout (), что приводит к показу подсказки для входа в систему.

Мы еще не совсем внедрили это, поэтому в логике могут быть ошибки, но в основном мы подходим к нему. Кроме того, приведенный выше код не является нашим фактическим кодом, поскольку он содержит немного больше логики обработки, но это суть его.

Вот очень хороший учебник для этого http://clintberry.com/2012/backbone-js-apps-authentication-tutorial/

Я думаю, что вы должны не только управлять дисплеем HTML, но и управлять данными дисплея. Потому что пользователь может использовать Firefox для изменения вашего кода JavaScript.

Для получения подробной информации, вы должны дать пользователю токен после того, как он входит в систему, и каждый раз, когда он или она посещают ваш компонент на странице, такой как сетка данных, дерево или что -то в этом роде, страница должна получить эти данные (возможно, в JSON) из вашего веб -сервиса, И веб -сервис проверит этот токен, если токен неверен или в прошлом, вы не должны предоставлять пользовательские данные вместо этого, вы должны дать сообщение об ошибке. Так что пользователь не может взломать вашу безопасность, даже если он или она использует Firebug, чтобы изменить код JS.

Это может помочь вам.

Я думаю, что вы должны сделать только этот сервер ... есть много шансов получить его взломанное устройство, и если у вас нет какого -то удивительного API, отвечающего на него

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top