首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如果用户已在ionic framework中登录,如何跳过登录页面

如果用户已在ionic framework中登录,如何跳过登录页面
EN

Stack Overflow用户
提问于 2015-06-18 21:38:46
回答 5查看 19K关注 0票数 18

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

app.js

代码语言:javascript
复制
$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');
    });
});

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

编辑:我可以进行身份验证并重定向到仪表板,但我的问题是登录页面显示了几秒钟(最多2秒),然后重定向到仪表板,而我正在使用IONIC应用程序

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

EN

回答 5

Stack Overflow用户

发布于 2015-09-23 16:33:02

我执行以下操作:

在app.js中

代码语言:javascript
复制
.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');

身份验证是一个工厂,它将身份验证会话存储在本地存储中。

代码语言:javascript
复制
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;
      }
   }
});
票数 31
EN

Stack Overflow用户

发布于 2015-06-19 17:54:28

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

代码语言:javascript
复制
angular.module("myapp.permission").run($rootScope){
    $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
        var loggedIn = true;
        if(loggedIn) {
            $state.go('app.dashboard');
        }
    }
}
票数 0
EN

Stack Overflow用户

发布于 2016-09-23 13:36:50

男士们试试这个优雅的解决方案:

  1. 如果用户未登录,但需要登录,则重定向到登录。
  2. 如果用户尝试登录,但他已经登录,则阻止他登录。
  3. 将每个路径标记为"requireAuth“,它将起作用。
  4. 将您的代码放在app.js<代码>E29中

.run(function ($rootScope,$location,authService) { $rootScope.$on('$stateChangeStart',function (ev,to,toParams,from,fromParams) ){ if (to.requireAuth && !authService.isAuthed()) { $location.path("/login");} else if (to.name == 'login‘&& authService.isAuthed()) { ev.preventDefault();$location.path("/dashboard");} });})

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30916966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档