骨干路由器重定向,如果未经过身份验证

时间:2014-09-08 10:11:31

标签: backbone.js routing marionette

我正在尝试实现一个需要登录和用户身份验证的简单应用。由于我是骨干和牵线木偶的新手,我一直在尝试按照本教程的示例进行操作:https://github.com/davidsulc/marionette-gentle-introduction

通常我已经设置了一个新应用:

var App = new Marionette.Application({});

App.addRegions({
    headerRegion : "#nav-region",
    mainRegion : "#main-region"
});

App.navigate = function(route,  options){
    options || (options = {});
    Backbone.history.navigate(route, options);
};

App.getCurrentRoute = function(){
   return Backbone.history.fragment
};

App.on("start", function(){
    if(Backbone.history){
       Backbone.history.start();
    }
});

路由器在模块中定义,例如:

App.module("ContentManagementApp", function(ContentManagementApp, App, Backbone, Marionette, $, _){
    ContentManagementApp.Router = Marionette.AppRouter.extend({
        appRoutes : {
            "contentmanagement/:dsid(/:dspageclassid)": "showContentMananagement",
        }
    });

    var API = {
        showContentMananagement : function(dsid, dspageclassid){
            // If not set, set to frontpage
            ContentManagementApp.Show.Controller.showDSPage(dsid, dspageclassid);
            App.execute("set:active:header", "contentmanagement");
        },
    };

    App.on("contentmanagement:show", function(dsid, dspageclassid){
        App.navigate("contentmanagement/" + dsid + "/" + dspageclassid);
        API.showContentMananagement(dsid, dspageclassid);
    });

    App.addInitializer(function(){
        new ContentManagementApp.Router({
        controller : API
        });
    });
});

我想测试用户是否已登录并在应用启动时重定向到登录页面,但似乎之前调用了App.addInitializer。这是否意味着我必须在每个模块中进行检查,或者我能以某种方式得到它吗?

2 个答案:

答案 0 :(得分:2)

如何确定用户是否已登录?

如果调用可能失败的API(由于用户未经身份验证),它可能会返回HTTP错误代码403.我通常使用全局jQuery ajax.error()处理程序执行此操作,我检查它是否为403(Forbidden)用于我的任何普通API调用(模型提取等),如果是,我会重定向到登录URL。

否则,如果您要检查cookie或类似内容,则应在调用Backbone.history.start()之前执行此操作。仅在用户登录时启动应用程序。 :)

答案 1 :(得分:0)

我只是在我的应用程序中设置它 - 在用户登录时在你的后端创建一个cookie /在他们注销时销毁它。然后我使用jquery-cookie-rails gem以$ .cookie('cookie_name')的形式访问cookie,如果不存在,我将它们路由到signin路径。

我会注意 - 我还会检查用户是否在后端登录时遇到不同的控制器操作并正确路由它们。我只是喜欢额外的保护:)。