解决登录显示、首页显示bug

This commit is contained in:
2026-05-19 11:06:46 +08:00
parent 2f7e097e6c
commit 00a859c551
181 changed files with 55329 additions and 998 deletions

View File

@@ -2,8 +2,21 @@
import { AkReqResponse, AkReqUploadOptions, AkReq } from '@/uni_modules/ak-req/index.uts'
import type { AkReqOptions } from '@/uni_modules/ak-req/index.uts'
import { toUniError } from '@/utils/utils.uts'
import { getCurrentPageUrlWithQuery } from '@/utils/authRedirect.uts'
import { IS_TEST_MODE } from '@/ak/config.uts'
function isMerchantRouteForAuth(path: string): boolean {
return path.startsWith('/pages/mall/merchant/')
}
function getExpiredAuthRedirectUrl(): string {
const currentUrl = getCurrentPageUrlWithQuery()
if (isMerchantRouteForAuth(currentUrl)) {
return `/pages/user/login?mode=merchant&redirect=${encodeURIComponent(currentUrl)}`
}
return '/pages/user/login'
}
export type AkSupaSignInResult = {
access_token : string;
refresh_token : string;
@@ -713,12 +726,6 @@ export class AkSupa {
this.baseUrl = baseUrl;
this.apikey = apikey;
this.storage = new AkSupaStorageApi(this);
// [CHANGE][2026-01-30] hydrate user/session from persisted token (see docs: components/supadb/docs/CHANGELOG.md)
try {
this.hydrateSessionFromStorage();
} catch (e) {
// ignore
}
}
/**
@@ -790,14 +797,15 @@ export class AkSupa {
// [CHANGE][2026-01-30] hydrate user from /auth/v1/user when token exists in storage
async hydrateSessionFromStorage() : Promise<boolean> {
const startedAt = Date.now();
try {
const token = AkReq.getToken();
if (token == null || token == '') {
console.log('[HydrateSession] no persisted token found');
console.log('[HydrateSession] no persisted token found, elapsed=' + (Date.now() - startedAt));
return false;
}
const tokenPreview = token.length > 12 ? (token.substring(0, 6) + '...' + token.substring(token.length - 6)) : token;
console.log('[HydrateSession] found persisted token:', tokenPreview);
console.log('[HydrateSession] found persisted token:', tokenPreview, 'elapsed=' + (Date.now() - startedAt));
const res = await AkReq.request({
url: this.baseUrl + '/auth/v1/user',
method: 'GET',
@@ -809,7 +817,7 @@ export class AkSupa {
}, false);
const status = res.status ?? 0;
if (!(status >= 200 && status < 400)) {
console.warn('[HydrateSession] /auth/v1/user failed with status:', status);
console.warn('[HydrateSession] /auth/v1/user failed with status:', status, 'elapsed=' + (Date.now() - startedAt));
return false;
}
let user: UTSJSONObject | null = null;
@@ -819,7 +827,7 @@ export class AkSupa {
user = null;
}
if (user == null) {
console.warn('[HydrateSession] /auth/v1/user returned empty user payload');
console.warn('[HydrateSession] /auth/v1/user returned empty user payload, elapsed=' + (Date.now() - startedAt));
return false;
}
this.user = user;
@@ -835,10 +843,10 @@ export class AkSupa {
raw: user
} as AkSupaSignInResult;
}
console.log('[HydrateSession] restored session for user:', user.getString('id') ?? 'unknown');
console.log('[HydrateSession] restored session for user:', user.getString('id') ?? 'unknown', 'elapsed=' + (Date.now() - startedAt));
return true;
} catch (e) {
console.error('[HydrateSession] unexpected error:', e);
console.error('[HydrateSession] unexpected error, elapsed=' + (Date.now() - startedAt) + ':', e);
return false;
}
}
@@ -1308,7 +1316,7 @@ async delete(table : string, filter : string | null) : Promise<AkReqResponse<any
// completely removed global storage clearing
uni.reLaunch({ url: '/pages/user/login' });
uni.reLaunch({ url: getExpiredAuthRedirectUrl() });
throw toUniError('登录已过期,请重新登录', '用户认证失败');
}
}