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

前端之家收集整理的这篇文章主要介绍了angularjs – 如果用户未经过身份验证,则重定向到路由前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试干净地实现一种方法,如果他们没有登录,将用户重定向登录路由.我的解决方案是基于另一个不能开箱即用的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'");
            }
        }
    };
};

猜你在找的Angularjs相关文章