@ozo/react-jazz
Version:
React 桌面端开发脚手架,基于CRA3,通用、开箱即用。
88 lines (76 loc) • 2.2 kB
JavaScript
/**
* 保存用户信息与登录信息token等其他公共信息
*/
import { observable, action } from 'mobx';
import { ApiUrls } from '@/api';
import { getQueryString } from '@/utils';
import Store from '@/stores/Store';
class UserStore extends Store {
// 全局token
token = '';
constructor(rootStore) {
super();
this.rootStore = rootStore;
// 数据持久化
this.persistParam('token', true, true); // 单个key
// this.persistParam(['mobile', 'nickName', 'imgUrl']); // 多个key,示例
// 从Url获得token参数
const tToken = getQueryString('token');
if (tToken) {
this.setToken(tToken);
}
Store.commonRequestData = { token: this.token };
Store.refreshToken = this.refreshToken.bind(this);
}
/**
* @description token 过期后自动刷新 token
* @param {String} url 调用刷新的接口
* @param {Object} params 调用刷新的接口的参数
* @param {String} type 请求类型
*/
refreshToken(url, params, type) {
this.setToken(undefined);
// 刷新token的逻辑
//...
}
setToken(token) {
this.token = token;
}
/**
* 获取鉴权Url
* @param {object} params 重定向url
* @returns {promise}
*/
getAuthUrl = (
params = {
redirectUri: `${window.location.origin}${process.env.PUBLIC_URL}`,
}
) => {
return this.sendGet(ApiUrls.GET_AUTHORIZE_URL, params, true).then((json) => {
const { result, data } = json;
if (result === '0' && data) {
window.location.replace(json.data);
}
});
};
/**
*
* 检查权限
* @memberof UserStore
* @returns Promise
*/
checkAuth() {
// 请求权限鉴定
return this.sendPost(ApiUrls.CHECK_RESCODE_AUTHORITY, {
resourceCode: getQueryString('resCode'),
}).then((res) => res && res.result === '0');
}
/**
* 退出登录
*/
loginOut = () => {
this.setToken(undefined);
};
}
export default UserStore;