首先,适用于应用程序的静态页面是否应该是登录页面?

其次,我的服务器端代码很好(它不会提供用户无法看到的任何数据)。但是,如何使我的应用程序知道,如果未登录用户,请返回登录表格?

有帮助吗?

解决方案

我有一个我的静态页面(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响应它

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top