Mat*_*hew 42 javascript jquery backbone.js underscore.js
首先,为应用程序提供的静态页面应该是登录页面吗?
其次,我的服务器端代码很好(它不会提供用户不应该看到的任何数据).但是如何让我的应用知道如果用户没有登录,返回登录表单?
Jen*_*Alm 70
我使用会话概念来控制用户登录状态.
我有一个SessionModel和SessionCollection,如下所示:
SessionModel = Backbone.Model.extend({
defaults: {
sessionId: "",
userName: "",
password: "",
userId: ""
},
isAuthorized: function(){
return Boolean(this.get("sessionId"));
}
});
Run Code Online (Sandbox Code Playgroud)
在应用程序启动时,我初始化一个全局可用的变量activeSession.在开始时,此会话未经授权,并且任何绑定到此模型实例的视图都可以相应地呈现 在登录尝试时,我首先通过使会话无效来注销.
logout = function(){
window.activeSession.id = "";
window.activeSession.clear();
}
Run Code Online (Sandbox Code Playgroud)
这将触发任何监听activeSession的视图,并将我的mainView置于登录模式,在该模式下将显示登录提示.然后我从用户那里获取userName和密码,并将它们设置在activeSession上,如下所示:
login = function(userName, password){
window.activeSession.set(
{
userName: userName,
password: password
},{
silent:true
}
);
window.activeSession.save();
}
Run Code Online (Sandbox Code Playgroud)
这将通过backbone.sync触发对服务器的更新.在服务器上,我有会话资源POST操作设置,以便它检查userName和密码.如果有效,它会填写会话中的用户详细信息,设置唯一的会话ID并删除密码,然后发回结果.
然后我的backbone.sync设置为将window.activeSession的sessionId添加到服务器的任何传出请求.如果服务器上的会话ID无效,它会发回HTTP 401,触发logout(),导致显示登录提示.
我们还没有完全实现这一点,因此逻辑中可能存在错误,但基本上,这就是我们处理它的方式.此外,上面的代码不是我们的实际代码,因为它包含更多的处理逻辑,但它是它的要点.
Sam*_*Sam 14
我有一个后端调用,我的客户端代码,我的静态页面(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);
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31651 次 |
| 最近记录: |