Ext.define('saas.model.Session', { extend: 'Ext.data.Model', fields: [ { name: 'token', type: 'string' }, { name: 'expire', type: 'number' }, { name: 'timestamp', type: 'number' }, { name: 'span', type: 'number' }, { name: 'account' } ], statics: { login: function(username, password) { return new Ext.Promise(function (resolve, reject) { Ext.Ajax.request({ url: '/api/operation/auth/authorize', params: { username: username, password: password }, method: 'POST', success: function (response) { var res = Ext.decode(response.responseText); if (res.success) { var session = saas.model.Session.loadData(res.data.token), account = res.data.account, companyId = res.data.companyId; account.companyId = companyId; session.set('account', account); // 服务端与本地存在时间差 session.set('span', session.get('timestamp') - new Date().getTime()); if (!session.isValid()) { reject({ message: '登录失败,无效身份令牌' }); } else { resolve(session); } } else { Ext.log.error('request failure with code: ', res.code, ', message: ', res.message); reject(res); } }, failure: function (response) { Ext.log.error('server-side failure with status code: ', response.status); reject(response); } }); }); } }, isValid: function() { return !Ext.isEmpty(this.get('token')) && this.get('token').length > 128 && this.get('timestamp') + this.get('expire') * 1000 > new Date().getTime() + this.get('span'); }, logout: function() { return new Ext.Promise(function (resolve, reject) { resolve({}); }); } });