解决登录显示、首页显示bug
This commit is contained in:
@@ -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('登录已过期,请重新登录', '用户认证失败');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user