Pregunta

En primer lugar, ¿debería la página estática que se sirve para la aplicación la página de inicio de sesión?

En segundo lugar, el código del lado del servidor está bien (no dará ningún dato que el usuario no debería ver). Pero, ¿cómo hago que mi aplicación sepa que si el usuario no ha iniciado sesión, para volver a un formulario de inicio de sesión?

¿Fue útil?

Solución

Tengo una llamada de back-end que mi código del lado del cliente que hace mi página estática (index.php) para verificar si el usuario actual ha iniciado sesión. Supongamos que tiene una llamada de backend al api/auth/logged_in que devuelve el código de estado HTTP 200 Si el usuario ha iniciado sesión o 400 de lo contrario (usando sesiones basadas en 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);
       }
     });
  }
});

Otros consejos

Utilizo el concepto de sesión para controlar el estado de inicio de sesión del usuario.

Tengo un Modelo de Session y Session -Collection como esta:

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

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

});

Al inicio de la aplicación, inicializo una variable a nivel mundial, ActiveSession. Al inicio, esta sesión no está autorizada y cualquier visión vinculante para esta instancia de modelo puede representar en consecuencia. En el intento de inicio de sesión, primero cierre la sesión invalidando la sesión.

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

Esto desencadenará cualquier visión que escuche la ActiveSession y pondrá mi vista principal en el modo de inicio de sesión donde publicará un mensaje de inicio de sesión. Luego obtengo el nombre de usuario y la contraseña del usuario y los establezco en laza de activos así:

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

Esto activará una actualización del servidor a través de Backbone.sync. En el servidor, tengo la configuración de la acción de la publicación de recursos de sesión para que verifique el nombre de usuario y la contraseña. Si es válido, llena los detalles del usuario en la sesión, establece una ID de sesión única y elimina la contraseña y luego envía el resultado.

Mi backbone.sync se configura para agregar el INTERENCIO DE SESIÓN de Window.ActiveSession a cualquier solicitud saliente al servidor. Si la ID de sesión no es válida en el servidor, envía un HTTP 401, que desencadena un inicio de sesión (), lo que lleva a la presentación de la solicitud de inicio de sesión.

Todavía no hemos terminado de implementar esto, por lo que puede haber errores en la lógica, pero básicamente, así es como lo abordamos. Además, el código anterior no es nuestro código real, ya que contiene un poco más de lógica de manejo, pero es la esencia de él.

Creo que no solo debe controlar la pantalla HTML, sino también controlar los datos de visualización. Porque el usuario puede usar Firefox para cambiar su código JavaScript.

Para detalles, debe darle un token al usuario después de iniciar sesión y cada vez que visite su componente en la página, como la cuadrícula de datos o el árbol o algo así, la página debe obtener estos datos (tal vez en JSON) de su servicio web, Y el servicio web verificará este token, si el token es incorrecto o pasado debido, no debe dar datos del usuario, en su lugar, debe dar un mensaje de error. Para que ese usuario no pueda descifrar su seguridad, incluso si usa Firebug para cambiar el código JS.

Eso podría ser ayuda para ti.

Creo que deberías hacer este servidor solo ... hay muchas posibilidades de obtener una unidad pirateada y a menos que tengas algún tipo de API sorprendente que responda a ella.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top