mirror of
https://github.com/pure-admin/pure-admin-thin.git
synced 2026-01-12 00:20:39 +08:00
perf: 登录
This commit is contained in:
@@ -7,12 +7,12 @@ export interface DataInfo<T> {
|
||||
accessToken: string;
|
||||
/** `accessToken`的过期时间(时间戳) */
|
||||
expires: T;
|
||||
/** 用于调用刷新accessToken的接口时所需的token */
|
||||
refreshToken: string;
|
||||
/** 用户名 */
|
||||
username?: string;
|
||||
/** 当前登陆用户的角色 */
|
||||
roles?: Array<string>;
|
||||
/** 当前登陆用户的角色 */
|
||||
user?: any;
|
||||
}
|
||||
|
||||
export const userKey = "user-info";
|
||||
@@ -35,13 +35,13 @@ export function getToken(): DataInfo<number> {
|
||||
|
||||
/**
|
||||
* @description 设置`token`以及一些必要信息并采用无感刷新`token`方案
|
||||
* 无感刷新:后端返回`accessToken`(访问接口使用的`token`)、`refreshToken`(用于调用刷新`accessToken`的接口时所需的`token`,`refreshToken`的过期时间(比如30天)应大于`accessToken`的过期时间(比如2小时))、`expires`(`accessToken`的过期时间)
|
||||
* 无感刷新:后端返回`accessToken`(访问接口使用的`token`)(用于调用刷新`accessToken`的接口时所需的`token`,的过期时间(比如30天)应大于`accessToken`的过期时间(比如2小时))、`expires`(`accessToken`的过期时间)
|
||||
* 将`accessToken`、`expires`这两条信息放在key值为authorized-token的cookie里(过期自动销毁)
|
||||
* 将`username`、`roles`、`refreshToken`、`expires`这四条信息放在key值为`user-info`的localStorage里(利用`multipleTabsKey`当浏览器完全关闭后自动销毁)
|
||||
* 将`username`、`roles`、`expires`这四条信息放在key值为`user-info`的localStorage里(利用`multipleTabsKey`当浏览器完全关闭后自动销毁)
|
||||
*/
|
||||
export function setToken(data: DataInfo<Date>) {
|
||||
let expires = 0;
|
||||
const { accessToken, refreshToken } = data;
|
||||
const { accessToken } = data;
|
||||
const { isRemembered, loginDay } = useUserStoreHook();
|
||||
expires = new Date(data.expires).getTime(); // 如果后端直接设置时间戳,将此处代码改为expires = data.expires,然后把上面的DataInfo<Date>改成DataInfo<number>即可
|
||||
const cookieString = JSON.stringify({ accessToken, expires });
|
||||
@@ -62,11 +62,15 @@ export function setToken(data: DataInfo<Date>) {
|
||||
: {}
|
||||
);
|
||||
|
||||
function setUserKey(username: string, roles: Array<string>) {
|
||||
function setUserKey(
|
||||
accessToken: string,
|
||||
username: string,
|
||||
roles: Array<string>
|
||||
) {
|
||||
useUserStoreHook().SET_USERNAME(username);
|
||||
useUserStoreHook().SET_ROLES(roles);
|
||||
storageLocal().setItem(userKey, {
|
||||
refreshToken,
|
||||
accessToken,
|
||||
expires,
|
||||
username,
|
||||
roles
|
||||
@@ -75,13 +79,13 @@ export function setToken(data: DataInfo<Date>) {
|
||||
|
||||
if (data.username && data.roles) {
|
||||
const { username, roles } = data;
|
||||
setUserKey(username, roles);
|
||||
setUserKey(accessToken, username, roles);
|
||||
} else {
|
||||
const username =
|
||||
storageLocal().getItem<DataInfo<number>>(userKey)?.username ?? "";
|
||||
const roles =
|
||||
storageLocal().getItem<DataInfo<number>>(userKey)?.roles ?? [];
|
||||
setUserKey(username, roles);
|
||||
setUserKey(accessToken, username, roles);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,8 @@ import type {
|
||||
import { stringify } from "qs";
|
||||
import NProgress from "../progress";
|
||||
import { getToken, formatToken } from "@/utils/auth";
|
||||
import { message } from "@/utils/message";
|
||||
|
||||
// 相关配置请参考:www.axios-js.com/zh-cn/docs/#axios-request-config-1
|
||||
const defaultConfig: AxiosRequestConfig = {
|
||||
// 请求超时时间
|
||||
@@ -91,6 +93,7 @@ class PureHttp {
|
||||
});
|
||||
},
|
||||
error => {
|
||||
message("请求异常!", { type: "error" });
|
||||
return Promise.reject(error);
|
||||
}
|
||||
);
|
||||
@@ -116,6 +119,7 @@ class PureHttp {
|
||||
return response.data;
|
||||
},
|
||||
(error: PureHttpError) => {
|
||||
message("服务异常!", { type: "error" });
|
||||
const $error = error;
|
||||
$error.isCancelRequest = Axios.isCancel($error);
|
||||
// 关闭进度条动画
|
||||
|
||||
14
src/utils/rsaEncrypt.ts
Normal file
14
src/utils/rsaEncrypt.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import JSEncrypt from "jsencrypt";
|
||||
// 密钥对生成 http://web.chacuo.net/netrsakeypair
|
||||
const publicKey =
|
||||
"MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANL378k3RiZHWx5AfJqdH9xRNBmD9wGD\n" +
|
||||
"2iRe41HdTNF8RUhNnHit5NpMNtGL0NPTSSpPjjI1kJfVorRvaQerUgkCAwEAAQ==";
|
||||
|
||||
// 加密
|
||||
export const encrypt = (txt: string) => {
|
||||
const crypt = new JSEncrypt();
|
||||
// 设置公钥
|
||||
crypt.setPublicKey(publicKey);
|
||||
const enc = crypt.encrypt(txt);
|
||||
return enc; // 对需要加密的数据进行加密
|
||||
};
|
||||
Reference in New Issue
Block a user