如果用户已登录离子框架,如何跳过登录页面

Alp*_*edi 16 angularjs ionic-framework

我正在开发一个IONIC应用程序,我已经检查过用户是否已经登录,如果用户已经登录,那么应用程序应该重定向到仪表板上.此功能运行良好,但应用程序首先显示登录页面几秒钟,然后重定向到仪表板.

app.js

$rootScope.$on("$locationChangeStart", function (event, next, current) {
    var prefs = plugins.appPreferences;
    prefs.fetch('iuserid').then(function (value) {
        if (value != '') {
            $state.go('app.dashboard');
        }
    });
.config(function ($stateProvider, $urlRouterProvider, $httpProvider) {
    $stateProvider
        .state('app', {
            url: "/app",
            abstract: true,
            templateUrl: "templates/menu.html",
            controller: 'AppCtrl'
        })
        .state('login', {
            url: "/login",
            templateUrl: "templates/login.html",
            controller: 'LoginCtrl'
        })
        .state('app.dashboard', {
            url: "/dashboard",
            views: {
                'menuContent': {
                    templateUrl: "templates/dashboard.html",
                    controller: 'DashboardCtrl'
                }
            }
        })
        ;
    // if none of the above states are matched, use this as the fallback
    $urlRouterProvider.otherwise('/login');
    });
});
Run Code Online (Sandbox Code Playgroud)

我不知道我在哪里弄错了.

编辑:我能够进行身份验证并重定向到仪表板,但我的问题是显示少数(最多2秒)的登录页面,然后重定向到仪表板,我正在处理IONIC应用程序

第二次编辑 我发现了问题,但不知道解决方案.首选项在$ ionicPlatform.ready中工作很大,但在$ locationChangeStart中不起作用.我需要$ locationChangeStart中的首选项,因为它在$ ionicPlatformReady之前运行.我迫切需要解决方案.

Mik*_*hez 31

我做以下事情:

在app.js中

.state('login', {
    url: "/login",
    templateUrl     : "templates/session/login.html",
    controller      : 'SessionCtrl'
  })

  .state('register', {
    url: "/register",
    templateUrl     : "templates/session/register.html",
    controller      : 'SessionCtrl'
  })
  .state('app', {
    url: "/app",
    abstract: true,
    templateUrl     : "templates/menu.html",
    controller      : 'AppCtrl',
    onEnter: function($state, Auth){
        if(!Auth.isLoggedIn()){
           $state.go('login');
        }
    }
  })
  .state('app.main', {
    url: "/main",
    views: {
      'menuContent': {
        templateUrl   : "templates/main_menu.html",
        controller    : "MainMenuCtrl"
      }
    }
  })

  $urlRouterProvider.otherwise('/app/main');
Run Code Online (Sandbox Code Playgroud)

Auth是一个工厂,它将auth会话存储在localstorage中.

angular.module('auth.services', [])
.factory('Auth', function () {
   if (window.localStorage['session']) {
      var _user = JSON.parse(window.localStorage['session']);
   }
   var setUser = function (session) {
      _user = session;
      window.localStorage['session'] = JSON.stringify(_user);
   }

   return {
      setUser: setUser,
      isLoggedIn: function () {
         return _user ? true : false;
      },
      getUser: function () {
         return _user;
      },
      logout: function () {
         window.localStorage.removeItem("session");
         window.localStorage.removeItem("list_dependents");
         _user = null;
      }
   }
});
Run Code Online (Sandbox Code Playgroud)


Mar*_*tra 0

我认为你应该监听$stateChangeStart上的事件$rootScope,你可以在运行时监听这个事件,如下所示:

angular.module("myapp.permission").run($rootScope){
    $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
        var loggedIn = true;
        if(loggedIn) {
            $state.go('app.dashboard');
        }
    }
}
Run Code Online (Sandbox Code Playgroud)