| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- 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/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);
- session.set('account', res.data.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);
- }
- });
- });
- },
- switchCompany: function(oldSession, companyId) {
- return new Ext.Promise(function (resolve, reject) {
- Ext.Ajax.request({
- url: '/api/auth/switch/company',
- params: {
- companyId: companyId
- },
- method: 'GET',
- headers: {
- 'Authorization': oldSession.get('token')
- },
- success: function (response) {
- var res = Ext.decode(response.responseText);
- if (res.success) {
- var newSession = saas.model.Session.loadData(res.data);
- newSession.set('account', oldSession.get('account'));
- // 服务端与本地存在时间差
- newSession.set('span', newSession.get('timestamp') - new Date().getTime());
- if (!newSession.isValid()) {
- reject({
- message: '切换失败,无效身份令牌'
- });
- } else {
- resolve(newSession);
- }
- } 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({});
- });
- }
- });
|