Marionette JS多路由、控制器和会话管理
Marionette JS multiple route ,controller and session management
所以我的 Marionette 应用程序有以下 2 个路由和控制器
- 用于用户登录和注销的 AuthRoute 和 AuthController
- 用于用户列表、新用户和编辑用户的 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,您还将在浏览器中保存用户会话。
所以我的 Marionette 应用程序有以下 2 个路由和控制器
- 用于用户登录和注销的 AuthRoute 和 AuthController
- 用于用户列表、新用户和编辑用户的 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,您还将在浏览器中保存用户会话。