From 652ebfb5ef20a09e86b38a79a332fda6e1d79acd Mon Sep 17 00:00:00 2001 From: tao Date: Tue, 23 Dec 2025 13:30:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20auth=20=E6=96=B9=E6=B3=95?= =?UTF-8?q?=20=E6=96=B0=E5=A2=9E=E5=8A=A0=E5=AF=86=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/auth.ts | 30 ++++++++++++++++++++++++++++++ src/utils/jsencrypt.ts | 31 +++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 src/utils/jsencrypt.ts diff --git a/src/utils/auth.ts b/src/utils/auth.ts index 48d05df..09f2183 100644 --- a/src/utils/auth.ts +++ b/src/utils/auth.ts @@ -1,4 +1,8 @@ import Cookies from 'js-cookie'; +import { encrypt } from '@/utils/jsencrypt'; + +// 30 天 +export const expiresTime = 30; export const TokenKey = 'Admin-Token' @@ -13,3 +17,29 @@ export function setToken(token: string) { export function removeToken() { return Cookies.remove(TokenKey) } + +export interface AccountInfo { + username?: string; + password?: string; + rememberMe?: 'true' | 'false'; +} + +export function getAccount() { + return { + username: Cookies.get("username"), + password: Cookies.get("password"), + rememberMe: Cookies.get("rememberMe"), + }; +} + +export function setAccount(account: AccountInfo) { + account.username && Cookies.set("username", account.username, { expires: expiresTime}); + account.password && Cookies.set("password", encrypt(account.password) as string, { expires: expiresTime}); + account.rememberMe != null && Cookies.set("rememberMe", account.rememberMe, { expires: expiresTime}); +} + +export function removeAccount() { + Cookies.remove("username"); + Cookies.remove("password"); + Cookies.remove("rememberMe"); +} diff --git a/src/utils/jsencrypt.ts b/src/utils/jsencrypt.ts new file mode 100644 index 0000000..265415d --- /dev/null +++ b/src/utils/jsencrypt.ts @@ -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 function encrypt(txt: string) { + const encryptor = new JSEncrypt(); + encryptor.setPublicKey(publicKey); // 设置公钥 + return encryptor.encrypt(txt); // 对数据进行加密 +} + +// 解密 +export function decrypt(txt: string) { + const encryptor = new JSEncrypt(); + encryptor.setPrivateKey(privateKey); // 设置私钥 + return encryptor.decrypt(txt); // 对数据进行解密 +}