Marionette JS多路径,控制器和会话管理

时间:2015-12-17 19:00:15

标签: backbone.js marionette

所以我的Marionette应用程序有2个路由和控制器

  1. 用于用户登录和注销的AuthRoute和AuthController
  2. UserRoute和UserControler用于用户列表,新用户和编辑用户
  3. 在AuthController中,当用户登录时,我需要将用户会话保存在某处,以便它可以同时接受这两个路由,因此,下次当用户点击用户列表页面时,我可以检查用户会话,然后加载用户列表页面。

    我怎样才能做到这一点?

    此外,检查用户会话是否有效的最佳方法是什么?我的计划是创建一个服务,如果会话有效,将返回用户详细信息,否则将返回401,但在时间服务返回响应之前,我无法加载路径特定视图。

    有人可以帮助我吗?

    先谢谢 MSK

2 个答案:

答案 0 :(得分:1)

我通常将会话数据保存在 Marionette.Application 引用的单个 Beckbone.Model 中。

会话模型:

var SessionModel = Backbone.Model.extend({
    initialize: function () {

        this.listenTo(this, 'change', function (model) {
            // Manage cookies storage
            // ex. using js.cookie
            Cookies.set('session', model.toJSON(), {expires: 1});
        });
    },
    checkAuth: function () {
        ...
    },
    login: function (user, password, remember) {
        ...
    },
    logout: function () {
        ...
    }
});

应用:

var app = new Marionette.Application({
    session: new SessionModel(),
    ...
})
app.reqres.setHandlers({
    session: function () {
        return app.session;
    }
});

然后,您可以从任意点访问会话模型,通过"全局频道":

Backbone.Wreqr.radio.channel('global').reqres.request('session').checkAuth()

因此,您可以在会话模型类中实现可以从整个应用程序访问的所有会话过程。使用cookie,您还可以在浏览器中保存用户会话。

答案 1 :(得分:0)

如果您使用Backbone的后端API,那么:

  

我怎样才能做到这一点?

保存用户会话的最佳方法是使用Cookie。用它来存储和检索用户authentication_token。

  

此外,检查用户会话是否有效的最佳方法是什么   不?

您必须在后端存储authentication_token。对于登录,注销,注册,您应该使用API​​进行迭代。