Session.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. Ext.define('saas.model.Session', {
  2. extend: 'Ext.data.Model',
  3. fields: [
  4. { name: 'token', type: 'string' },
  5. { name: 'expire', type: 'number' },
  6. { name: 'timestamp', type: 'number' },
  7. { name: 'span', type: 'number' },
  8. { name: 'account' }
  9. ],
  10. statics: {
  11. login: function(username, password) {
  12. return new Ext.Promise(function (resolve, reject) {
  13. Ext.Ajax.request({
  14. url: '/api/operation/auth/authorize',
  15. params: {
  16. username: username,
  17. password: password
  18. },
  19. method: 'POST',
  20. success: function (response) {
  21. var res = Ext.decode(response.responseText);
  22. if (res.success) {
  23. var session = saas.model.Session.loadData(res.data.token),
  24. account = res.data.account, companyId = res.data.companyId;
  25. account.companyId = companyId;
  26. session.set('account', account);
  27. // 服务端与本地存在时间差
  28. session.set('span', session.get('timestamp') - new Date().getTime());
  29. if (!session.isValid()) {
  30. reject({
  31. message: '登录失败,无效身份令牌'
  32. });
  33. } else {
  34. resolve(session);
  35. }
  36. } else {
  37. Ext.log.error('request failure with code: ', res.code, ', message: ', res.message);
  38. reject(res);
  39. }
  40. },
  41. failure: function (response) {
  42. Ext.log.error('server-side failure with status code: ', response.status);
  43. reject(response);
  44. }
  45. });
  46. });
  47. }
  48. },
  49. isValid: function() {
  50. return !Ext.isEmpty(this.get('token')) && this.get('token').length > 128
  51. && this.get('timestamp') + this.get('expire') * 1000 > new Date().getTime() + this.get('span');
  52. },
  53. logout: function() {
  54. return new Ext.Promise(function (resolve, reject) {
  55. resolve({});
  56. });
  57. }
  58. });