2012-07-06 97 views
12

我一直在琢磨了好一阵子我怎么会去使用骨干,因为我一直在阅读关于它的几篇文章和很多人都在谈论令牌和密钥认证用户。但我只想能够登录一个用户并像通常一样注册一个用户。Backbone.js的和用户认证

我在想,在Web应用程序启动时会有到路由请求“/我”,然后服务器,如果他(她)在登录/给用户返回相应的信息。

一样,如果该路由回到{loggedIn: false}骨干路由器会将用户发送到登录/注册页面。但是如果它回来了一个用户配置文件信息,那么这显然意味着他有一个会话。

这是使用主干时回去用户身份验证的方法好吗?

+0

注册,注册及身份验证使用Javascript?我会说不。使用Php,Erlang,Python,Asp.net使用后端框架来放置这些作品。用户登录后,设置一个cookie(我能想到的最佳解决方案)。 **每个**'xml http'请求都将拥有可帮助您验证服务器端用户的cookie。在服务器和身份验证中需要做某些事情,授权就是其中之一。在 – Deeptechtons 2012-07-06 11:27:15

+1

用户登录这就是我说的,我的问题,但我想知道如果我的方法是处理在登录或未经授权的用户 – jamcoupe 2012-07-06 12:38:17

回答

31

简短的回答:线高达$就向401(未授权)状态代码响应。

龙答:我们正在消耗从单页网站一个RESTful API。当服务器检测到未经授权的请求时,它只返回一个401.客户端将重定向到/ login?#requested/resource。

/login会提示进行授权(重定向到我们的情况下,谷歌的誓言服务器),然后添加一个授权cookie,并重定向到最初请求#requested/resource

我们也发送每$阿贾克斯要求身份验证的cookie。

希望这是有帮助的。

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很好的解决方案的好方法后做JS的东西。奇迹般有效。 – 2013-06-11 06:34:39