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 { 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 || "调用微信登录接口失败")); } }); }); } };