Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将未经身份验证的用户重定向到ember中的登录屏幕的最简单方法_Javascript_Ember.js - Fatal编程技术网

Javascript 将未经身份验证的用户重定向到ember中的登录屏幕的最简单方法

Javascript 将未经身份验证的用户重定向到ember中的登录屏幕的最简单方法,javascript,ember.js,Javascript,Ember.js,我现在开始使用Ember,并使用bootstrap的modal类创建了一个模式登录屏幕 我知道如何显示登录屏幕,我想将其与路由集成,以便在每次转换时检查用户的当前登录状态,如果用户未登录,则将其重定向到条目页面并弹出登录屏幕 我正在寻找横切此要求的最“不要重复自己”的方法,任何余烬专家可以帮助我吗?一种方法是为受保护的路由创建一条特殊路由(或通过重新打开覆盖余烬.route),为非受保护的路由创建一条公共路由。然后延伸这些路线 /*Ember.Route.reopen({*//*to globa

我现在开始使用Ember,并使用bootstrap的modal类创建了一个模式登录屏幕

我知道如何显示登录屏幕,我想将其与路由集成,以便在每次转换时检查用户的当前登录状态,如果用户未登录,则将其重定向到条目页面并弹出登录屏幕


我正在寻找横切此要求的最“不要重复自己”的方法,任何余烬专家可以帮助我吗?

一种方法是为受保护的路由创建一条特殊路由(或通过
重新打开
覆盖
余烬.route
),为非受保护的路由创建一条公共路由。然后延伸这些路线

/*Ember.Route.reopen({*//*to globally protect all routes*/
App.ProtectedRoute = Ember.Route.extend({
    beforeModel: function() {

//if no promise used and isAuthenticated returns a boolean
//        if (!isAuthenticated()) {
//            this.transitionTo("login");
//        }

//if promise used and isAuthenticated returns a promise
        var self = this;
/*using the error part of then if error code is returned from server, otherwise the succes part could be used check the data value and decide the outcome*/
        return isAuthenticated().then(null, function(data) {
            self.transitionTo("login");
            return Ember.RSVP.resolve(data);
        });
    }
});

/*to be used for views that do not require authentication*/
App.PublicRoute = Ember.Route.extend({
    /*skip default Route's security check*/
    beforeModel: function() {
    }
});
一条受保护的路线是

App.FirstRoute = App.ProtectedRoute.extend();
App.SecondRoute = App.PublicRoute.extend();
公共路线是,

App.FirstRoute = App.ProtectedRoute.extend();
App.SecondRoute = App.PublicRoute.extend();
带有promise的
已验证
,可能类似于

function isAuthenticated(){
/*calling server to check if authenticated, if not authenticated server returns error code i.e. 500*/
return $.ajax({});
}

我将在哪里定义我的“isAuthenticated”函数?在一切之外?@thenaglecode通常我将这种代码放在特定的控制器(例如,
App.AuthenticationController
)中,没有任何仅为业务逻辑关联的
路由
视图
,否则一个全局函数也就足够了。所以像计算属性一样?@thenaglecode实际上只是一个函数。下面是我描述的两个快速示例。第一个具有全局函数,可以放置在任何位置,例如在特定的库相关文件()中,第二个使用保存业务逻辑的
ember
控制器,以便在需要时访问awesome
ember
对象模型/功能()。我还建议查看ember简单身份验证。它非常易于使用,即使您不使用它,您也可以看到它们如何处理身份验证: