Files
YGChatCS/src/hooks/useGoLogin.js

109 lines
2.7 KiB
JavaScript

import { oauthToken, checkUserPhone } from "@/request/api/LoginApi";
import { authLogin, refreshAuthLogin, checkRefreshToken } 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 });
// 检测token
export const checkToken = () => {
const token = getAccessToken();
return new Promise((resolve) => {
if (!token) {
goLogin();
return;
}
resolve();
});
};
// 登录逻辑
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 authLogin(e).then(async () => {
console.log("authLogin 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 bindUserPhone(params);
if (res.data) {
// 登录成功后,触发登录成功事件
uni.$emit(NOTICE_EVENT_LOGIN_SUCCESS);
resolve();
} else {
console.log("绑定手机号失败");
removeAccessToken();
reject();
}
});
});
};
/// 检查手机号登录
export const onCheckPhoneLogin = async () => {
return new Promise(async (resolve) => {
await refreshAuthLogin().then(async () => {
// 刷新成功后,检查手机号是否绑定
const access_token = getAccessToken();
const checkRes = await checkUserPhone({
token: access_token,
});
if (checkRes.data) {
// 登录成功后,触发登录成功事件
uni.$emit(NOTICE_EVENT_LOGIN_SUCCESS);
resolve(false);
} else {
resolve(true);
}
});
});
};
/// apple登录
export const onAppleLogin = async (e) => {
return new Promise(async (resolve) => {
await refreshAuthLogin()
.then(() => {
// 登录成功后,触发登录成功事件
uni.$emit(NOTICE_EVENT_LOGIN_SUCCESS);
resolve(true);
})
.catch(() => {
resolve(false);
});
});
}
/// 刷新 token
export const refreshToken = async () => {
await checkRefreshToken()
};