diff --git a/src/sheep/utils/request.ts b/src/sheep/utils/request.ts index 7f8289d..bae2c13 100644 --- a/src/sheep/utils/request.ts +++ b/src/sheep/utils/request.ts @@ -222,12 +222,17 @@ const autoLogin = async (): Promise => { function isZzdNeedSmsVerify(data: unknown): data is { needSmsVerify: true; bindSessionId: string; displayName?: string } { if (!data || typeof data !== "object") return false const o = data as Record - return o.needSmsVerify === true && typeof o.bindSessionId === "string" + const need = + o.needSmsVerify === true || o.needSmsVerify === "true" || o.needSmsVerify === 1 || o.needSmsVerify === "1" + const sid = o.bindSessionId + const sidStr = typeof sid === "string" ? sid : sid != null ? String(sid) : "" + return need && sidStr.length > 0 } function goZzdSmsVerify(data: { bindSessionId: string; displayName?: string }) { + const sid = typeof data.bindSessionId === "string" ? data.bindSessionId : String(data.bindSessionId || "") const name = typeof data.displayName === "string" ? data.displayName : "" - const q = `bindSessionId=${encodeURIComponent(data.bindSessionId)}&displayName=${encodeURIComponent(name)}` + const q = `bindSessionId=${encodeURIComponent(sid)}&displayName=${encodeURIComponent(name)}` uni.reLaunch({ url: `/pages/user/zzdSmsVerify?${q}` }) } @@ -252,9 +257,14 @@ async function zzdLoginCore(): Promise<"ok" | "sms" | "failed"> { const res: any = await userApi.auth({ authCode }) if (res?.code == 0) { if (isZzdNeedSmsVerify(res.data)) { - goZzdSmsVerify(res.data) + goZzdSmsVerify(res.data as { bindSessionId: string; displayName?: string }) return "sms" } + const d = res.data + if (!d || typeof d !== "object" || (!d.accessToken && !d.refreshToken)) { + uni.showToast({ title: "登录返回数据异常,请重试", icon: "none", duration: 4000 }) + return "failed" + } uni.setStorageSync(TOKEN_KEY, res.data) const { data: userData } = await userApi.userInfo() uni.setStorageSync(USER_INFO_KEY, userData) @@ -263,6 +273,7 @@ async function zzdLoginCore(): Promise<"ok" | "sms" | "failed"> { if (res?.msg) { uni.showToast({ title: res.msg, icon: "none", duration: 4000 }) } + return "failed" } catch (e) { console.warn("[loginByZzd] authCode 登录未成功,尝试 uabaseToken", e) }