12

我一直想知道如何使用 Backbone 对用户进行身份验证,因为我一直在阅读一些关于它的文章,其中很多都在谈论令牌和密钥。但我只想能够登录一个用户并像你通常那样注册一个用户。

我在想,在网络应用程序启动时,会有一个对路由“/me”的请求,然后如果用户登录,服务器会向用户返回适当的信息。

就像路由与{loggedIn: false}骨干路由器一起返回时只会将用户发送到登录/注册页面。但是,如果它返回了用户个人资料信息,那么显然意味着他有一个会话。

在使用 Backbone 时,这是一种返回用户身份验证的好方法吗?

4

1 回答 1

32

简短的回答:连接 $.ajax 以响应 401(未授权)状态代码。

长答案:我们正在使用来自单页网站的 RESTful api。当服务器检测到未经授权的请求时,它只返回 401。客户端将重定向到 /login?#requested/resource。

/login将提示授权(在我们的例子中重定向到谷歌的 oath 服务器)然后添加一个授权 cookie 并重定向到最初请求的#requested/resource

我们还在每个 $.ajax 请求上发送 auth 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();
        });
    });
于 2012-07-06T20:33:15.910 回答