javascript - for - backbone.js-manejo si un usuario está conectado o no
backbone view events (5)
En primer lugar, ¿la página estática que se sirve para la aplicación debe ser la página de inicio de sesión?
En segundo lugar, mi código del lado del servidor está bien (no proporcionará ningún dato que el usuario no pueda ver). Pero, ¿cómo hago saber a mi aplicación que si el usuario no está conectado, para volver a un formulario de inicio de sesión?
Aquí hay un muy buen tutorial para él http://clintberry.com/2012/backbone-js-apps-authentication-tutorial/
Creo que deberías hacer esto solo en el servidor ... Hay muchas posibilidades de obtenerlo pirateado y a menos que tengas algún tipo de API increíble que responda a él
Creo que no solo deberías controlar la pantalla html sino también controlar los datos de la pantalla. Porque el usuario puede usar Firefox para cambiar su código de JavaScript.
Para más detalles, debe darle al usuario un token después de que inicie sesión y cada vez que visite su componente en una página como una cuadrícula o árbol de datos o algo así, la página debe obtener estos datos (tal vez en json) de su servicio web, y el servicio web comprobará este token, si el token es incorrecto o está pasado debido a que no debería proporcionar datos de usuario, debería dar un mensaje de error. Para que el usuario no pueda descifrar su seguridad incluso si usa firebug para cambiar el código js.
Eso podría ser de ayuda para ti.
Utilizo el concepto de sesión para controlar el estado de inicio de sesión del usuario.
Tengo un SessionModel y SessionCollection como este:
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 disponible en todo el mundo, activeSession. Al inicio, esta sesión no está autorizada y cualquier vista que se vincule a esta instancia de modelo se puede representar en consecuencia. En el intento de inicio de sesión, primero salgo de sesión al invalidar la sesión.
logout = function(){
window.activeSession.id = "";
window.activeSession.clear();
}
Esto desencadenará cualquier vista que escuche el activeSession y pondrá mi mainView en modo de inicio de sesión donde colocará un aviso de inicio de sesión. Luego obtengo el nombre de usuario y la contraseña del usuario y los configuro en la Session activa de esta manera:
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 acción POST de recurso de sesión para que compruebe el nombre de usuario y la contraseña. Si es válido, rellena los detalles del usuario en la sesión, establece una identificación de sesión única y elimina la contraseña y luego devuelve el resultado.
Mi backbone.sync se configura para agregar el sessionId de window.activeSession a cualquier solicitud de salida al servidor. Si el ID de la sesión no es válido en el servidor, devuelve un HTTP 401, que desencadena un cierre de sesión (), lo que lleva a que se muestre el aviso 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 lo esencial.
Tengo una llamada de fondo que mi código del lado del cliente que mi página estática (index.php) hace para verificar si el usuario actual está conectado. Digamos que tiene una llamada de fondo en api/auth/logged_in
que devuelve código de estado HTTP 200
si el usuario está conectado o 400
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);
}
});
}
});