javascript - backbone.js - 处理用户是否登录

标签 javascript jquery backbone.js underscore.js

首先,为应用提供的静态页面应该是登录页面吗?

其次,我的服务器端代码没有问题(它不会提供用户不应该看到的任何数据)。但是,如果用户未登录,我如何让我的应用知道返回登录表单?

最佳答案

我使用 session 概念来控制用户登录状态。

我有一个像这样的 SessionModel 和 SessionCollection:

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

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

});

在应用程序启动时,我初始化了一个全局可用的变量 activeSession。开始时这个 session 是未经授权的,任何绑定(bind)到这个模型实例的 View 都可以相应地呈现。在尝试登录时,我首先通过使 session 无效来注销。

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

这将触发任何监听 activeSession 的 View ,并将我的 mainView 置于登录模式,并在其中显示登录提示。然后我从用户那里获取用户名和密码,并将它们设置在 activeSession 上,如下所示:

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

这将通过 backbone.sync 触发对服务器的更新。在服务器上,我设置了 session 资源 POST 操作,以便它检查用户名和密码。如果有效,它会在 session 中填写用户详细信息,设置唯一的 session ID 并删除密码,然后发回结果。

然后设置我的 backbone.sync 以将 window.activeSession 的 sessionId 添加到对服务器的任何传出请求。如果服务器上的 session ID 无效,它会发回一个 HTTP 401,这会触发一个 logout(),导致显示登录提示。

我们还没有完全实现这一点,因此逻辑上可能存在错误,但基本上,这就是我们处理它的方式。另外,上面的代码不是我们的实际代码,因为它包含了更多的处理逻辑,但它是它的要点。

关于javascript - backbone.js - 处理用户是否登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5808655/

相关文章:

javascript - 在 RxJS 中链接多个 flatMap 运算符时,如何摆脱 Bluebird 警告?

javascript - 谷歌组织结构图 : Modify node parent

javascript - 如何在 jquery 中通过其 href 获取元素?

ruby-on-rails - Rails CSRF token 真实性和设计

javascript - ExtJS 图表闪存文件

非英语语言的 Javascript

javascript - backbone.js model.set 不工作

javascript - 性能 - 为什么 backbone/jQuery 复制切片和拼接?

javascript - 如何在 contenteditable div 中设置光标位置

jquery - 我如何在 jsFiddle 中运行代码,在 html 窗口中没有标签 html、body、script