AngularJS ui-router login authentication

前端 未结 10 2444
[愿得一人]
[愿得一人] 2020-11-22 11:13

I am new to AngularJS, and I am a little confused of how I can use angular-\"ui-router\" in the following scenario:

I am building a web application which consists of

10条回答
  •  时光说笑
    2020-11-22 11:22

    I have another solution: that solution works perfectly when you have only content you want to show when you are logged in. Define a rule where you checking if you are logged in and its not path of whitelist routes.

    $urlRouterProvider.rule(function ($injector, $location) {
       var UserService = $injector.get('UserService');
       var path = $location.path(), normalized = path.toLowerCase();
    
       if (!UserService.isLoggedIn() && path.indexOf('login') === -1) {
         $location.path('/login/signin');
       }
    });
    

    In my example i ask if i am not logged in and the current route i want to route is not part of `/login', because my whitelist routes are the following

    /login/signup // registering new user
    /login/signin // login to app
    

    so i have instant access to this two routes and every other route will be checked if you are online.

    Here is my whole routing file for the login module

    export default (
      $stateProvider,
      $locationProvider,
      $urlRouterProvider
    ) => {
    
      $stateProvider.state('login', {
        parent: 'app',
        url: '/login',
        abstract: true,
        template: ''
      })
    
      $stateProvider.state('signin', {
        parent: 'login',
        url: '/signin',
        template: ''
      });
    
      $stateProvider.state('lock', {
        parent: 'login',
        url: '/lock',
        template: ''
      });
    
      $stateProvider.state('signup', {
        parent: 'login',
        url: '/signup',
        template: ''
      });
    
      $urlRouterProvider.rule(function ($injector, $location) {
        var UserService = $injector.get('UserService');
        var path = $location.path();
    
        if (!UserService.isLoggedIn() && path.indexOf('login') === -1) {
             $location.path('/login/signin');
        }
      });
    
      $urlRouterProvider.otherwise('/error/not-found');
    }
    

    () => { /* code */ } is ES6 syntax, use instead function() { /* code */ }

提交回复
热议问题