繁体   English   中英

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

[英]Ionic 1 - Show login page if user not logged and skip if user is already logged

在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'); }) 

这就是我在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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM