gpt4 book ai didi

ember.js 认证

转载 作者:行者123 更新时间:2023-12-01 03:58:23 25 4
gpt4 key购买 nike

我想用 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");
}
}
}
});

如果 url 是“/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);
}
});

关于ember.js 认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15416143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com