diff --git a/src/hooks/useGoLogin.js b/src/hooks/useGoLogin.js index da33f54..e2222a4 100644 --- a/src/hooks/useGoLogin.js +++ b/src/hooks/useGoLogin.js @@ -69,18 +69,41 @@ export const checkToken = () => { // 刷新token export const refreshToken = () => { + let provider = "weixin"; + let grant_type = "wechat"; + + // #ifdef APP-PLUS + const systemInfo = uni.getSystemInfoSync(); + if (systemInfo.platform === "ios") { + provider = "apple"; + grant_type = "apple"; + } + // #endif + return new Promise(async (resolve) => { uni.login({ - provider: "weixin", //使用微信登录 - success: async ({ code }) => { - console.log("进入 refreshToken success", code); + provider, + success: async (loginRes) => { + console.log("refreshToken success: ", JSON.stringify(loginRes)); + const openIdCode = + provider === "apple" + ? loginRes.appleInfo && loginRes.appleInfo.identityToken + : loginRes.code; + console.log("获取到的授权code:", openIdCode); + + if (!openIdCode) { + console.warn("refreshToken 未获取到登录 code"); + resolve(true); + return; + } + const params = { - openIdCode: [code], - grant_type: "wechat", - scope: "server", + openIdCode: [openIdCode], + grant_type: grant_type, clientId: clientId, + scope: "server", }; - console.log("获取到的微信授权params:", JSON.stringify(params)); + console.log("获取到的授权params:", JSON.stringify(params)); const response = await oauthToken(params); if (response.access_token) { @@ -89,7 +112,6 @@ export const refreshToken = () => { const checkRes = await checkUserPhone({ token: response.access_token, }); - if (checkRes.data) { // 登录成功后,触发登录成功事件 uni.$emit(NOTICE_EVENT_LOGIN_SUCCESS); @@ -99,6 +121,10 @@ export const refreshToken = () => { } } }, + fail: (err) => { + console.warn("refreshToken uni.login fail:", err); + resolve(true); + }, }); }); }; diff --git a/src/main.js b/src/main.js index 30b209a..5841745 100644 --- a/src/main.js +++ b/src/main.js @@ -23,7 +23,9 @@ export function createApp() { pinia.use(createUnistorage()); app.use(pinia); + // #ifdef MP-WEIXIN app.use(share); + // #endif return { app, diff --git a/src/manager/AuthManager.js b/src/manager/AuthManager.js deleted file mode 100644 index 23455ee..0000000 --- a/src/manager/AuthManager.js +++ /dev/null @@ -1,29 +0,0 @@ -export const getWeChatAuthCode = (e) => { - return new Promise((resolve, reject) => { - // 条件编译微信小程序、抖音小程序 - let provider = ""; - // #ifdef MP-WEIXIN - provider = "weixin"; - // #endif - - // #ifdef MP-TOUTIAO - provider = "toutiao"; - // #endif - - // 判断用户拒绝授权 - if ( - e !== undefined && - e.detail.errMsg === "getPhoneNumber:fail user deny" - ) { - reject(); - return; - } - - uni.login({ - provider, - onlyAuthorize: true, - success: (res) => resolve(res.code), - fail: (err) => reject(err), - }); - }); -}; diff --git a/src/manager/LoginManager.js b/src/manager/LoginManager.js index 7947b4c..554a415 100644 --- a/src/manager/LoginManager.js +++ b/src/manager/LoginManager.js @@ -1,5 +1,4 @@ import { oauthToken, bindUserPhone } from "../request/api/LoginApi"; -import { getWeChatAuthCode } from "./AuthManager"; import { clientId } from "@/constant/base"; import { NOTICE_EVENT_LOGIN_SUCCESS } from "@/constant/constant"; import { removeAccessToken, setAccessToken } from "../constant/token"; @@ -7,25 +6,66 @@ import { removeAccessToken, setAccessToken } from "../constant/token"; const loginAuth = (e) => { removeAccessToken(); - return new Promise(async (resolve, reject) => { - const openIdCode = await getWeChatAuthCode(e); - console.log("获取到的微信授权code:", openIdCode); - const params = { - openIdCode: [openIdCode], - grant_type: "wechat", - scope: "server", - clientId: clientId, - }; - console.log("获取到的微信授权params:", JSON.stringify(params)); - const response = await oauthToken(params); - console.log("获取到的微信授权response:", response); + // 条件编译微信小程序、抖音小程序、APP-PLUS(包含iOS和Android) + let provider = "weixin"; + let grant_type = "wechat"; - if (response.access_token) { - setAccessToken(response.access_token); - resolve(); - } else { - reject(response.message || "登录失败"); - } + // #ifdef MP-WEIXIN + provider = "weixin"; + grant_type = "wechat"; + // #endif + + // #ifdef MP-TOUTIAO + provider = "toutiao"; + grant_type = "toutiao"; + // #endif + + // #ifdef APP-PLUS + const systemInfo = uni.getSystemInfoSync(); + if (systemInfo.platform === "ios") { + provider = "apple"; + grant_type = "apple"; + } + // #endif + + return new Promise(async (resolve, reject) => { + uni.login({ + provider, + onlyAuthorize: true, + success: async (loginRes) => { + console.log("Authorize success: ", JSON.stringify(loginRes)); + const openIdCode = + provider === "apple" + ? loginRes.appleInfo && loginRes.appleInfo.identityToken + : loginRes.code; + console.log("获取到的授权code:", openIdCode); + + if (!openIdCode) { + console.warn("refreshToken 未获取到登录 code"); + reject("refreshToken 未获取到登录 code"); + return; + } + + const params = { + openIdCode: [openIdCode], + grant_type: grant_type, + clientId: clientId, + scope: "server", + }; + console.log("获取到的授权params:", JSON.stringify(params)); + + const response = await oauthToken(params); + if (response.access_token) { + setAccessToken(response.access_token); + resolve(); + } else { + reject(response.message || "登录失败"); + } + }, + fail: (err) => { + reject("登录失败"); + }, + }); }); }; @@ -34,7 +74,7 @@ const bindPhone = async (params) => { const response = await bindUserPhone(params); return response; } catch (error) { - throw err; + throw error; } }; diff --git a/src/pages/index/index.vue b/src/pages/index/index.vue index e4cd9db..3661618 100644 --- a/src/pages/index/index.vue +++ b/src/pages/index/index.vue @@ -31,7 +31,6 @@ import DrawerSection from "../DrawerSection/index.vue"; import Calender from "@/components/Calender/index.vue"; const appStore = useAppStore(); -const locationStore = useLocationStore(); const calendarVisible = ref(false); const selectedDate = ref(""); diff --git a/src/pages/login/index.vue b/src/pages/login/index.vue index ddb4c15..7a26856 100644 --- a/src/pages/login/index.vue +++ b/src/pages/login/index.vue @@ -28,11 +28,17 @@ - @@ -62,11 +68,20 @@ const privacyAgreement = ref(""); // 协议类型 const AgreeType = ref("service"); const logo = computed(() => getCurrentConfig().logo); +const isAppleLogin = ref(false); +const loginButtonText = computed(() => + isAppleLogin.value ? "Apple ID快捷登录" : "手机号快捷登录" +); + +// #ifdef APP-PLUS +const systemInfo = uni.getSystemInfoSync(); +isAppleLogin.value = systemInfo.platform === "ios"; +// #endif // 同意隐私协议并获取手机号 const handleAgreeAndGetPhone = () => { // 如果需要微信登录,直接返回 - if (needWxAuthLogin.value) { + if (needWxAuthLogin.value && !isAppleLogin.value) { return; } diff --git a/src/utils/share.js b/src/utils/share.js index f6a1cbf..3409dbb 100644 --- a/src/utils/share.js +++ b/src/utils/share.js @@ -1,5 +1,6 @@ export default { install(app) { + // #ifdef MP-WEIXIN app.mixin({ onLoad() { const page = getCurrentPages().pop(); @@ -13,5 +14,6 @@ export default { } }, }); + // #endif }, };