Files
YGChatCS/src/hooks/useGoLogin.js
2026-01-06 19:42:10 +08:00

105 lines
2.7 KiB
JavaScript

import { oauthToken, checkUserPhone } from "@/request/api/LoginApi";
import { loginAuth, bindPhone } from "@/manager/LoginManager";
import { clientId } from "@/constant/base";
import { getAccessToken, removeAccessToken, setAccessToken } from "../constant/token";
import { NOTICE_EVENT_LOGIN_SUCCESS } from "@/constant/constant";
// 跳转登录
export const goLogin = () => uni.navigateTo({ url: "/pages/login/index" });
// 登录成功后,返回上一页
export const goBack = () => uni.navigateBack({ delta: 1 });
// 登录逻辑
export const onLogin = async (e) => {
console.info("onLogin code: ", e);
return new Promise(async (resolve, reject) => {
// 判断用户拒绝
if (e !== undefined && e && e.detail && e.detail.errno === 104) {
reject();
return;
}
await loginAuth(e).then(async () => {
console.log("loginAuth resolve success");
// 检查手机号是否绑定
const checkRes = await checkUserPhone();
if (checkRes.data) {
resolve();
return;
}
if (e === undefined) {
resolve();
return;
}
const { code } = e.detail;
// 绑定手机号
const params = { wechatPhoneCode: code, clientId: clientId };
const res = await bindPhone(params);
if (res.data) {
// 登录成功后,触发登录成功事件
uni.$emit(NOTICE_EVENT_LOGIN_SUCCESS);
resolve();
} else {
console.log("绑定手机号失败");
removeAccessToken();
reject();
}
});
});
};
// 检测token
export const checkToken = () => {
const token = getAccessToken();
return new Promise((resolve) => {
if (!token) {
goLogin();
return;
}
resolve();
});
};
// 刷新token
export const refreshToken = () => {
return new Promise(async (resolve) => {
uni.login({
provider: "weixin", //使用微信登录
success: async ({ code }) => {
console.log("进入 refreshToken success", code);
const params = {
openIdCode: [code],
grant_type: "wechat",
scope: "server",
clientId: clientId,
};
console.log("获取到的微信授权params:", JSON.stringify(params));
const response = await oauthToken(params);
if (response.access_token) {
setAccessToken(response.access_token);
const checkRes = await checkUserPhone({
token: response.access_token,
});
if (checkRes.data) {
// 登录成功后,触发登录成功事件
uni.$emit(NOTICE_EVENT_LOGIN_SUCCESS);
resolve(false);
} else {
resolve(true);
}
}
},
});
});
};