Files
WAI_Project_UNIX/utils/auth.ts
2026-01-21 01:37:34 +08:00

78 lines
1.6 KiB
TypeScript

import { ref } from "vue";
import { router, storage, user } from "@/cool";
/**
* 核心认证工具类
* 严格遵循微信官方登录规范,并保持与 cool 框架同步
*/
export const auth = {
/**
* 登录状态 (响应式)
*/
isLogin: ref(!!uni.getStorageSync("token")),
/**
* 获取本地 Token
*/
getToken(): string {
const token = uni.getStorageSync("token") || "";
this.isLogin.value = !!token;
return token;
},
/**
* 设置登录态 (核心修复:必须同步设置 deadtime 否则会被框架误判为过期)
*/
setToken(token: string, userInfo: any) {
// 1. 设置 Token (30天过期)
storage.set("token", token, 3600 * 24 * 30);
// 2. 设置用户信息
storage.set("userInfo", userInfo, 0);
// 3. 同步内存中的 user store (核心修复:框架内部请求使用的是这个 store)
user.token = token;
user.set(userInfo);
// 4. 更新响应式状态
this.isLogin.value = true;
},
/**
* 校验登录态
*/
checkLogin(): boolean {
return !!this.getToken();
},
/**
* 退出登录
*/
logout() {
storage.remove("token");
storage.remove("userInfo");
user.logout();
},
/**
* 强制获取登录码 (wx.login)
*/
getCode(): Promise<string> {
return new Promise((resolve, reject) => {
uni.login({
provider: "weixin",
success: (res) => {
if (res.code) {
resolve(res.code);
} else {
reject(new Error("获取微信登录码失败"));
}
},
fail: (err) => {
reject(new Error(err.errMsg || "调用微信登录接口失败"));
}
});
});
}
};