Ionic 1 - Показать страницу входа, если пользователь не вошел в систему, и пропустить, если пользователь уже вошел - PullRequest
0 голосов
/ 20 марта 2019

Работа над приложением 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 голосов
/ 20 марта 2019

Вот как я это сделал в 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;
}
...