backbone.js-处理用户是否登录
-
24-10-2019 - |
题
首先,适用于应用程序的静态页面是否应该是登录页面?
其次,我的服务器端代码很好(它不会提供用户无法看到的任何数据)。但是,如何使我的应用程序知道,如果未登录用户,请返回登录表格?
解决方案
我有一个我的静态页面(index.php)来检查当前用户是否已登录的后端呼叫。 api/auth/logged_in
返回HTTP状态代码 200
如果用户登录或 400
否则(使用基于Cookie的会话):
appController.checkUser(function(isLoggedIn){
if(!isLoggedIn) {
window.location.hash = "login";
}
Backbone.history.start();
});
...
window.AppController = Backbone.Controller.extend({
checkUser: function(callback) {
var that = this;
$.ajax("api/auth/logged_in", {
type: "GET",
dataType: "json",
success: function() {
return callback(true);
},
error: function() {
return callback(false);
}
});
}
});
其他提示
我使用会话概念控制用户登录状态。
我有一个会话模型和类似的会话:
SessionModel = Backbone.Model.extend({
defaults: {
sessionId: "",
userName: "",
password: "",
userId: ""
},
isAuthorized: function(){
return Boolean(this.get("sessionId"));
}
});
在应用程序开始时,我初始化了一个全球可用的变量活跃性。在开始时,本届会话未经授权,与此模型实例绑定的任何视图都可以相应地渲染。在登录尝试时,我首先通过使会话无效来注销。
logout = function(){
window.activeSession.id = "";
window.activeSession.clear();
}
这将触发任何听取活动的视图,并将我的Mainview进入登录模式,并在其中放置登录提示。然后,我从用户那里获取用户名和密码,并将其设置为这样的活跃活动:
login = function(userName, password){
window.activeSession.set(
{
userName: userName,
password: password
},{
silent:true
}
);
window.activeSession.save();
}
这将通过backbone.sync触发对服务器的更新。在服务器上,我有“会话资源后的操作设置”,以便检查用户名和密码。如果有效,它将填写在会话中的用户详细信息,设置一个唯一的会话ID并删除密码,然后将结果发送回结果。
然后,设置我的backbone.sync以将window的sessionID添加到对服务器的任何传出请求中。如果会话ID在服务器上无效,则将其发送回HTTP 401,该HTTP 401触发logout(),导致显示登录提示符。
我们还没有完成实施此功能,因此逻辑可能存在错误,但基本上,这就是我们处理它的方式。同样,上面的代码不是我们的实际代码,因为它包含更多的处理逻辑,但它是其中的要旨。
我认为您不仅应该控制HTML显示屏,还应控制显示数据。因为用户可以使用Firefox更改JavaScript代码。
详细信息,您应该在用户登录后,每次访问您或她在页面中访问您的组件(例如数据网格或树或类似物品)时,该页面必须从您的WebService中获取这些数据(也许是JSON), Web服务将检查此令牌,如果令牌不正确或到期,则不应提供用户数据,您应该给出错误消息。因此,即使用户使用Firebug更改JS代码,该用户也无法破解您的安全性。
这可能对您有帮助。
我认为您应该只做此服务器方面...有很多机会将其入侵单元,除非您有某种出色的API响应它