gpt4 book ai didi

angularjs - 如果用户未通过身份验证,则重定向到路由

转载 作者:行者123 更新时间:2023-12-04 20:44:28 25 4
gpt4 key购买 nike

如果用户未登录,我正在尝试干净地实现一种将用户重定向到登录路由的方法。我的解决方案基于另一个 SO 答案 here这不是开箱即用的。这是我的解决方案。

angular.module('myApp', ['ngResource', 'ngRoute'])
.config(['$routeProvider', function ($routeProvider) {
var requireAuthentication = function () {
return {
load: function ($q) {
console.log('Can user access route?');
if (g_isloggedIn === true) { // fire $routeChangeSuccess
var deferred = $q.defer();
deferred.resolve();
console.log('Yes they can!');
return deferred.promise;
} else { // fire $routeChangeError
console.log('No they cant!');
return $q.reject("'/login'");
}
}
};
};

$routeProvider
.when('/some_page_that_requires_authentication', {
templateUrl: '/views/secret.html',
controller: 'secretCtrl',
resolve: requireAuthentication()
})
.when('/anybody_can_see_me', {
templateUrl: '/views/public.html',
controller: 'publicCtrl',
});
}]);

我的问题是,我在哪里可以收听 $routeChangeError事件以便我可以重定向路线?我尝试在指令中执行此操作,但永远无法触发该事件。我不能把它放到 Controller 中,因为如果 promise 被拒绝,它就不会加载。有什么想法吗?

最佳答案

是否有理由不从函数内部重定向用户?
这对我来说很好用,如果 promise 没有解决,它不会加载 Controller / View 。

我修改了这样的函数:

var requireAuthentication = function () {
return {
load: function ($q, $location) {
console.log('Can user access route?');
var deferred = $q.defer();
deferred.resolve();
if (g_isloggedIn === true) { // fire $routeChangeSuccess
console.log('Yes they can!');
return deferred.promise;
} else { // fire $routeChangeError
console.log('No they cant!');
$location.path('/login');

// I don't think this is still necessary:
return $q.reject("'/login'");
}
}
};
};

关于angularjs - 如果用户未通过身份验证,则重定向到路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20531965/

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