ionic登录设计

2016.5.9 - 南京 ionic

1.使用token方式

使用spring security + oauth2的方式获取token,获取url:oauth/token,返回数据

{
  "access_token": "6d1b0493-0723-4f2a-95cc-f314ae715ed9",
  "token_type": "bearer",
  "refresh_token": "81c81c50-507b-4a7e-9f24-cff24a6c3509",
  "expires_in": 604799,
  "scope": "read trust write"
}

2.本地存储token

使用localStorage保存token,并保存它的有效期

.factory('localStorageService', ['$window', function ($window) {
  return {
    saveToken: function(username, response) {
      var createTime = new Date().getTime();
      var profile = {
        username: username,
        access_token: response.access_token,
        maxAge: response.expires_in,
        createTime: createTime,
        validTime: createTime + response.expires_in
      };
      $window.localStorage.setItem('profile', angular.toJson(profile));
    },
    isTokenExpired: function() {
      var profile = $window.localStorage.getItem('profile');
      if (profile) {
        if (angular.fromJson(profile).validTime < new Date().getTime()) {
          $window.localStorage.removeItem('profile'); // 移除过期的缓存令牌
          return true;
        } else {
          return false;
        }        
      }
      return true; // 未发现登录缓存,直接返回过期,使用户直接跳转到登录页
    }
  }
}])

3.自动登录校验token

已经登录过的用户,在token有效期内,不用重复登录

// 校验缓存里的令牌是否过期
if (!localStorageService.isTokenExpired()) {
  $state.go('tabsController.tasks');
  return;
}

相关阅读