2012-07-06 19 views
12

Me he estado preguntando durante un buen rato cómo iba a autenticar a los usuarios que usan Backbone porque he estado leyendo algunos artículos al respecto y muchos de ellos están hablando de tokens y claves. Solo quiero poder iniciar sesión en un usuario y registrar un usuario como lo haría normalmente.Backbone.js y autenticación de usuario

Estaba pensando que en la aplicación web puesta en marcha habría una solicitud a la ruta '/ yo' y entonces el servidor da al usuario de vuelta información apropiada si él/ella está en el sistema.

Al igual que si la ruta regresó con {loggedIn: false} el enrutador de la red troncal enviará al usuario a las páginas de inicio de sesión/registro solamente. Pero si regresara con información de perfil de un usuario, obviamente significaría que tuvo una sesión.

¿Es esta una buena forma de volver atrás la autenticación de usuario cuando se usa Backbone?

+0

Registrarse, registrarse y autenticarse mediante el Javascript? Yo diría que no. Coloque estas piezas usando el framework backend usando Php, Erlang, Python, Asp.net. Después de que el usuario inicie sesión, configure una cookie (la mejor solución que se me ocurre). ** Cada solicitud ** 'xml http' poseerá la cookie que lo ayudará a validar al usuario en el lado del servidor. Hay ciertas cosas que debe hacer en el servidor y Autenticación, la Autorización es una de ellas. Haga las cosas Js después de que el usuario inicie sesión en – Deeptechtons

+1

Eso es lo que estoy diciendo en mi pregunta, pero me pregunto si mi método es una buena manera de tratar con un usuario no autorizado – jamcoupe

Respuesta

31

Respuesta corta: cablee $ .ajax para responder a los códigos de estado 401 (no autorizados).

Respuesta larga: Estamos consumiendo una API REST desde un sitio web de una sola página. cuando el servidor detecta una solicitud no autorizada, simplemente devuelve un 401. El cliente se redirigirá a/login? # requested/resource.

/login pedirá autorización (redirigir al servidor de juramento de Google en nuestro caso) a continuación, añadir una cookie de autorización y redirigir a la inicialmente solicitada #requested/resource

también estamos enviando la cookie de autenticación en cada petición $ .ajax.

Espero que esto sea útil.

define(
    [ 
     'jquery', 
     'jquery.cookie' 
    ], 
    function ($) { 
     var redirectToLogin = function() { 
      var locationhref = "/login"; 
      if (location.hash && location.hash.length > 0) { 
       locationhref += "?hash=" + location.hash.substring(1); 
      } 
      location.href = locationhref; 
     }; 

     var $doc = $(document); 
     $doc.ajaxSend(function (event, xhr) { 
      var authToken = $.cookie('access_token'); 
      if (authToken) { 
       xhr.setRequestHeader("Authorization", "Bearer " + authToken); 
      } 
     }); 

     $doc.ajaxError(function (event, xhr) { 
      if (xhr.status == 401) 
       redirectToLogin(); 
     }); 
    }); 
+0

+1 gran solución. Funciona de maravilla. –

Cuestiones relacionadas