AngularJS | handle routing before they load

后端 未结 5 1073
我在风中等你
我在风中等你 2020-12-07 17:10

I wish to create a simple authentication check for my routes by external service.

I define the access requirements on the route object:

$routeProvide         


        
5条回答
  •  被撕碎了的回忆
    2020-12-07 17:37

    My solution was combining $locationChangeStart and $routeChangeStart:

    $rootScope.$on('$locationChangeStart', function (event) {
        //If login data not available, make sure we request for it
        if($facebook.isConnected()==null) {
            $facebook.getLoginStatus();
            event.preventDefault();
            return;
        }
    
        var next=parseRoute().$$route;
        if(!Auth.loginCheck(next))
            event.preventDefault();
    });
    

    I copied parseRoute() from angular-route.js to parse the given URL to route..

    Then I build my login check handler(Auth.loginCheck) in a way that if it fail it return false.

    I also use $routeChangeStart to handle $route.reload() events, so now after every change within my authentication status I just do $route.reload():

    $rootScope.$on('$routeChangeStart', function (event, next) {
        Auth.loginCheck(next);
    });
    

    Finally I just make sure that this custom service is always will run by using simple run() method.

    Edit:

    We now using ngAuth, a module we designed to solve that exact problem(based on the answer I gave here before).

    At last, we developed a angular-module that solved this issue.. This module is based on the answer I published here before.

    Due the requests here, we published a beta release that works now: http://github.com/GoDisco/ngAuth

    Feel free to use it.

提交回复
热议问题