You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
virtual-patient-web/src/utils/auth.ts

63 lines
2.2 KiB
TypeScript

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import Cookies from "js-cookie";
import { storageSession } from "@pureadmin/utils";
// import { useUserStoreHook } from "@/store/modules/user";
export interface DataInfo<T> {
/** token */
accessToken: string;
/** `accessToken`的过期时间(时间戳) */
expires: T;
/** 用于调用刷新accessToken的接口时所需的token */
refreshToken: string;
/** 用户名 */
username?: string;
/** 当前登陆用户的角色 */
roles?: Array<string>;
}
export const sessionKey = "user-info";
export const TokenKey = "authorized-token";
/** 获取`token` */
export function getToken(): DataInfo<number> {
// 此处与`TokenKey`相同,此写法解决初始化时`Cookies`中不存在`TokenKey`报错
// return Cookies.get(TokenKey)
// ? JSON.parse(Cookies.get(TokenKey))
// : storageSession().getItem(sessionKey);
return storageSession().getItem("token");
}
/**
* @description 设置`token`以及一些必要信息并采用无感刷新`token`方案
* 无感刷新:后端返回`accessToken`(访问接口使用的`token`)、`refreshToken`(用于调用刷新`accessToken`的接口时所需的`token``refreshToken`的过期时间比如30天应大于`accessToken`的过期时间比如2小时、`expires``accessToken`的过期时间)
* 将`accessToken`、`expires`这两条信息放在key值为authorized-token的cookie里过期自动销毁
* 将`username`、`roles`、`refreshToken`、`expires`这四条信息放在key值为`user-info`的sessionStorage里浏览器关闭自动销毁
*/
export function setToken(data: any) {
storageSession().setItem("token", data);
}
export function setUserInfo(data: any) {
storageSession().setItem("userInfo", JSON.stringify(data));
}
export function getUserInfo() {
const data = storageSession().getItem("userInfo");
return data;
}
/** 删除`token`以及key值为`user-info`的session信息 */
export function removeToken() {
Cookies.remove(TokenKey);
sessionStorage.clear();
}
/** 格式化tokenjwt格式 */
export const formatToken = (token: string): string => {
return "Bearer " + token;
};
export function clearObject(obj) {
Object.keys(obj).forEach(key => {
obj[key] = null; // 或者 obj[key] = undefined;
});
}