Ionic 1-如果用户未登录,则显示登录页面;如果用户已登录,则跳过

时间:2019-03-20 12:19:06

标签: angularjs angular-ui-router ionic-v1

正在处理需要以下功能的Ionic版本1.3.3应用程序,以便用户登录。我已经遍历了所有stackoverflow的答案,但没有找到对我有用的解决方案。

  1. 如果用户已经登录(通过Ionic $ localstorage检查),然后重定向到主页,则应用程序将在启动时进行检查
  2. 如果未登录用户,则在应用启动时重定向到登录页面
  3. 成功登录后在登录页面上重定向到主页并清除登录页面历史记录。

    angular.module('starter', ['ionic', 'starter.controllers', 'starter.directives', 'starter.services', 'ngStorage','ab-base64',])
    .config(function ($stateProvider, $urlRouterProvider) {
            $stateProvider
              .state('app', {
                  url: '/app',
                  abstract: true,
                  cache: false,
                  templateUrl: 'templates/menu.html',
                  controller: 'AppCtrl',
                  onEnter: function ($state) {
                     console.log($state);
                  }
              })
             .state('app.home', {
                 cache: false,
                 url: '/home',
                 views: {
                   'menuContent': {
                    templateUrl: 'templates/home.html'
                 }
               }
            })
            .state('app.login', {
                cache: false,
                url: '/login/:username/:password',
                views: {
                'menuContent': {
                   templateUrl: 'templates/login.html',
                   controller: 'LoginController'
                }
               }
            })
            .state('app.profile', {
                  cache: false,
                  url: '/profile',
                  views: {
                    'menuContent': {
                     templateUrl: 'templates/profile.html',
                     controller: 'ProfileController'
                  }
               }
            })
            $urlRouterProvider.otherwise('/app/home');
        })
    

1 个答案:

答案 0 :(得分:0)

这是我在Ionic v1中完成此操作的方式: 对于重定向(如果用户已登录):

.state("app.dash", {
    url: "/dashboard",
    abstract: true,
    views: {
      mainContent: {
        templateUrl: "templates/dashboard.html",
        controller: "DashboardCtrl",
        controllerAs: "vm",
        resolve: {
          auth: [
            "authService",
            function(authService) {
              return authService.isAuthenticated();
            }
          ],
          permissions: [
            "authService",
            function(authService) {
              return authService.getPermissions();
            }
          ]
        }
      }
    }
  })

用于在用户登录或已经登录时进行重定向。

.state("app.login", {
    url: "/login?accountCreated",
    views: {
      mainContent: {
        templateUrl: "templates/login.html",
        controller: "LoginCtrl",
        controllerAs: "vm",
        resolve: {
          isLoggedIn: [
            "$q",
            "$state",
            "authService",
            function($q, $state, authService) {
              authService.isAuthenticated().then(function(res) {
                $state.go("app.dash.home");
              });
              return $q.defer().resolve();
            }
          ]
        }
      }
    }
  })

身份验证服务isAuthenticated()

function isAuthenticated() {
  var deferred = $q.defer();

  getToken().then(function(token) {
    isExpired().then(function(isExpired) {
      if (!token || isExpired) {
        deferred.reject("Not Authenticated");
      } else {
        decodeToken().then(function(decodedToken) {
          deferred.resolve(decodedToken);
        });
      }
    });
  });

  return deferred.promise;
}
相关问题