Marionette JS多路由、控制器和会话管理

Marionette JS multiple route ,controller and session management

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

  1. 用于用户登录和注销的 AuthRoute 和 AuthController
  2. 用于用户列表、新用户和编辑用户的 UserRoute 和 UserControler

在 AuthController 中,当用户登录时,我需要将用户会话保存在某个地方,以便它可以访问这两个路由,所以下次当用户点击用户列表页面时,我可以检查用户会话,然后加载用户列表页。

我怎样才能做到这一点?

此外,检查用户会话是否有效的最佳方法是什么?我的计划是创建一个服务,如果会话有效,它将 return 用户详细信息,否则将 return 401,但直到服务 returns 响应我无法加载路由特定视图。

有人可以帮我解决这些问题吗?

提前致谢 MSK

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

How can I achieve this?

保存用户会话的最佳方式是 cookie。用它来存储和检索用户 authentication_token。

Also, what will be the best way to check if user session is valid or not?

您必须在后端存储 authentication_token。对于登录、注销、注册,您应该使用 API.

进行迭代

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

会话模型:

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;
    }
});

然后您可以通过"global channel"从任意点访问会话模型:

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

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