angularjs – 如果用户未经过身份验证,则重定向到路由
发布时间:2020-12-17 10:21:45 所属栏目:安全 来源:网络整理
导读:我正在尝试干净地实现一种方法,如果他们没有登录,将用户重定向到登录路由.我的解决方案是基于另一个不能开箱即用的SO答案 here.这是我的解决方案. angular.module('myApp',['ngResource','ngRoute']) .config(['$routeProvider',function ($routeProvider) {
我正在尝试干净地实现一种方法,如果他们没有登录,将用户重定向到登录路由.我的解决方案是基于另一个不能开箱即用的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事件,以便我可以重定向路由?我尝试在指令中执行它,但永远不会触发事件.我无法将其放入控制器,因为如果承诺被拒绝,它将无法加载.有什么想法吗?
您是否有理由不从函数内部重定向用户?
这对我来说很好,如果未解决承诺,它不会加载控制器/视图. 我修改了这个函数: 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'"); } } }; }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |