加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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'");
            }
        }
    };
};

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读