根据本地存储令牌属性加载状态 - stateProvider,ionic / angular js

时间:2015-04-06 17:24:57

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

我有这段代码:

var app = angular.module('myApp', ['ionic']);
app.config(function($stateProvider) {
  $stateProvider
      .state('login', {
        url: '/',
        templateUrl: 'login.html',
        controller: 'loginController' 
      })
      .state('home', {
        url: '/home',
        templateUrl: 'home.html',
        controller: 'homeController' 
      });
});
 $urlRouterProvider.otherwise('/');

如何向状态提供程序添加条件以验证是否存在localstorage.token。如果是,请回家,然后登录

现在,我一直在登录状态和那里(loginController)我验证我是否在localstorage上有一个令牌。我对我的版本不满意......这就是为什么我要改进它

2 个答案:

答案 0 :(得分:1)

我建议将home设置为默认路由,如果没有令牌,则执行重定向。所以这将是你的默认路线:

$urlRouterProvider.otherwise('/home');

如果没有令牌,你会重定向。您可以通过在运行块中查看$ locationChangeStart事件来实现此目的:

.run(function ($rootScope, $state) {
  $rootScope.on('$locationChangeStart', function(event, next, current) {
    // check for the user's token and that we aren't going to the login view
    if(!localStorage.token && next.templateUrl != 'login.html'){
      // go to the login view
      $state.go('login');
    }
  }
})

如果用户未经过身份验证,则可以将用户限制在登录视图中。

答案 1 :(得分:0)

在app.run中你可以添加你的逻辑;这将在页面加载和刷新时触发。

.run(function ($state) {
  if(localStorage.token) $state.go('home');
  else $state.go('login');
})