Session.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. Ext.define('school.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.getCmp('rootView').getController().setRequestToken(null);
  14. Ext.getCmp('rootView').getController().saveSession(null);
  15. Ext.Ajax.request({
  16. // url: 'http://10.1.80.23:9520/api/auth/authorize',
  17. url: '/api/auth/authorize',
  18. params: {
  19. username: username,
  20. password: password
  21. },
  22. method: 'POST',
  23. success: function (response) {
  24. var res = Ext.decode(response.responseText);
  25. if (res.success) {
  26. var session = school.model.Session.loadData(res.data.token),
  27. account = res.data.account;
  28. session.set('account', account);
  29. // 服务端与本地存在时间差
  30. session.set('span', session.get('timestamp') - new Date().getTime());
  31. if (!session.isValid()) {
  32. reject({
  33. message: '登录失败,无效身份令牌'
  34. });
  35. } else {
  36. resolve(session);
  37. }
  38. } else {
  39. Ext.log.error('request failure with code: ', res.code, ', message: ', res.message);
  40. reject(res);
  41. }
  42. },
  43. failure: function (response) {
  44. Ext.log.error('server-side failure with status code: ', response.status);
  45. reject(response);
  46. }
  47. });
  48. });
  49. }
  50. },
  51. isValid: function() {
  52. return !Ext.isEmpty(this.get('token')) && this.get('token').length > 128
  53. && this.get('timestamp') + this.get('expire') * 1000 > new Date().getTime() + this.get('span');
  54. },
  55. logout: function() {
  56. return new Ext.Promise(function (resolve, reject) {
  57. resolve({});
  58. });
  59. }
  60. });