feat: login
This commit is contained in:
72
src/utils/auth.ts
Normal file
72
src/utils/auth.ts
Normal file
@@ -0,0 +1,72 @@
|
||||
import { useCache, CACHE_KEY } from "@/hooks/web/useCache";
|
||||
import type { TokenType } from "@/services/login/types";
|
||||
import { decrypt, encrypt } from "@/utils/jsencrypt";
|
||||
|
||||
const { wsCache } = useCache();
|
||||
|
||||
const AccessTokenKey = "ACCESS_TOKEN";
|
||||
const RefreshTokenKey = "REFRESH_TOKEN";
|
||||
|
||||
// 获取token
|
||||
export const getAccessToken = () => {
|
||||
// 此处与TokenKey相同,此写法解决初始化时Cookies中不存在TokenKey报错
|
||||
const accessToken = wsCache.get(AccessTokenKey);
|
||||
return accessToken ? accessToken : wsCache.get("ACCESS_TOKEN");
|
||||
};
|
||||
|
||||
// 刷新token
|
||||
export const getRefreshToken = () => {
|
||||
return wsCache.get(RefreshTokenKey);
|
||||
};
|
||||
|
||||
// 设置token
|
||||
export const setToken = (token: TokenType) => {
|
||||
wsCache.set(RefreshTokenKey, token.refreshToken);
|
||||
wsCache.set(AccessTokenKey, token.accessToken);
|
||||
};
|
||||
|
||||
// 删除token
|
||||
export const removeToken = () => {
|
||||
wsCache.delete(AccessTokenKey);
|
||||
wsCache.delete(RefreshTokenKey);
|
||||
};
|
||||
|
||||
/** 格式化token(jwt格式) */
|
||||
export const formatToken = (token: string): string => {
|
||||
return "Bearer " + token;
|
||||
};
|
||||
// ========== 账号相关 ==========
|
||||
|
||||
export type LoginFormType = {
|
||||
tenantName: string;
|
||||
username: string;
|
||||
password: string;
|
||||
rememberMe: boolean;
|
||||
};
|
||||
|
||||
export const getLoginForm = () => {
|
||||
const loginForm: LoginFormType = wsCache.get(CACHE_KEY.LoginForm);
|
||||
if (loginForm) {
|
||||
loginForm.password = decrypt(loginForm.password) as string;
|
||||
}
|
||||
return loginForm;
|
||||
};
|
||||
|
||||
export const setLoginForm = (loginForm: LoginFormType) => {
|
||||
loginForm.password = encrypt(loginForm.password) as string;
|
||||
wsCache.set(CACHE_KEY.LoginForm, loginForm, { exp: 30 * 24 * 60 * 60 });
|
||||
};
|
||||
|
||||
export const removeLoginForm = () => {
|
||||
wsCache.delete(CACHE_KEY.LoginForm);
|
||||
};
|
||||
|
||||
// ========== 租户相关 ==========
|
||||
|
||||
export const getTenantId = () => {
|
||||
return wsCache.get(CACHE_KEY.TenantId);
|
||||
};
|
||||
|
||||
export const setTenantId = (username: string) => {
|
||||
wsCache.set(CACHE_KEY.TenantId, username);
|
||||
};
|
||||
31
src/utils/jsencrypt.ts
Normal file
31
src/utils/jsencrypt.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
import { JSEncrypt } from 'jsencrypt'
|
||||
|
||||
// 密钥对生成 http://web.chacuo.net/netrsakeypair
|
||||
|
||||
const publicKey =
|
||||
'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\n' +
|
||||
'nzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ=='
|
||||
|
||||
const privateKey =
|
||||
'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\n' +
|
||||
'7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN\n' +
|
||||
'PuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA\n' +
|
||||
'kM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow\n' +
|
||||
'cSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv\n' +
|
||||
'DQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh\n' +
|
||||
'YhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3\n' +
|
||||
'UP8iWi1Qw0Y='
|
||||
|
||||
// 加密
|
||||
export const encrypt = (txt: string) => {
|
||||
const encryptor = new JSEncrypt()
|
||||
encryptor.setPublicKey(publicKey) // 设置公钥
|
||||
return encryptor.encrypt(txt) // 对数据进行加密
|
||||
}
|
||||
|
||||
// 解密
|
||||
export const decrypt = (txt: string) => {
|
||||
const encryptor = new JSEncrypt()
|
||||
encryptor.setPrivateKey(privateKey) // 设置私钥
|
||||
return encryptor.decrypt(txt) // 对数据进行解密
|
||||
}
|
||||
Reference in New Issue
Block a user