ember.js身份验证

我想用ember.js实现身份验证.

因此,当应用程序启动时,在路由器处理请求的URL之前,我想检查用户状态.如果用户未经过身份验证,我想保存请求的URL并重定向到特定的URL(/ login).

我试图实现这个重载Ember.Route,但我认为这不是一个好习惯.

例如,如果我这样做:

var AuthRoute = Ember.Route.extend({  
    redirect: function() {  
        var controller = App.userController;  
            if (!controller.get("userAuth")) {  
                controller.set("lastFilter", this.routeName);  
                this.transitionTo("index");
            }  
        }  
    }  
});

如果,网址为’/ admin / foobar’,则管理路由将重定向而不是foobar.

我可以在路由器启动之前处理重定向吗?

最佳答案 我用的是这样的东西

Ember.SecureRoute = Ember.Route.extend({
  role: null,

  redirect: function (model) {
    if (!this.controllerFor('login').get('authenticated')) {
        this._routeToLogin();
    }

    var role = this.get('role');
    if (!Ember.isEmpty(role) && !this.controllerFor('login').hasRole(role)) {
        this._routeToLogin();
    } 
  },

  _routeToLogin: function () {
    var infos = this.get('router.router.currentHandlerInfos');

    this.router.router.didTransition(infos);

    var routeName = !this.router.router.hasRoute(this.routeName) ? this.routeName + '.index' : this.routeName;
    var params = infos.filter(function (item, index, enumerable) { return item.context !== undefined; }).map(function (item) { return item.context; })
    var url = Ember.Router.prototype.generate.apply(this.router, params.insertAt(0, routeName))
    this.router.location.setURL(url);

    this.transitionTo("login");
  }
});

在loginController中,您可以使用浏览器历史记录返回到原始路径

APP.LoginController = Ember.Controller.extend({
  //other stuff

  authenticate: function (username, password) {
    //do the authentication
    history.go(-1);
  }
});
点赞