s''
This commit is contained in:
@@ -36,7 +36,7 @@ type RecoveryResult = {
|
||||
};
|
||||
|
||||
const PAYJS_CHECK_BY_EMAIL_TIMEOUT =
|
||||
Number(process.env.PAYJSAPI_CHECK_BY_EMAIL_TIMEOUT) || 5000;
|
||||
Number(process.env.PAYJSAPI_CHECK_BY_EMAIL_TIMEOUT) || 20000;
|
||||
const PAYJS_CHECK_BY_EMAIL_RETRIES =
|
||||
Math.max(0, Number(process.env.PAYJSAPI_CHECK_BY_EMAIL_RETRIES) || 1);
|
||||
|
||||
@@ -49,6 +49,13 @@ function resolvePayApiUrl(request: NextRequest): string {
|
||||
).replace(/\/$/, "");
|
||||
}
|
||||
|
||||
function getLocalPayApiUrl(): string {
|
||||
return (
|
||||
process.env.PAYMENT_API_INTERNAL_URL?.trim() ||
|
||||
"http://127.0.0.1:8007"
|
||||
).replace(/\/$/, "");
|
||||
}
|
||||
|
||||
async function checkVipByEmailFromPayjsapi(
|
||||
request: NextRequest,
|
||||
email: string,
|
||||
@@ -57,8 +64,13 @@ async function checkVipByEmailFromPayjsapi(
|
||||
): Promise<PayjsVipEmailResult | null> {
|
||||
const payConfig = getPaymentConfig();
|
||||
const primaryUrl = resolvePayApiUrl(request);
|
||||
const localUrl = getLocalPayApiUrl();
|
||||
const candidates = Array.from(
|
||||
new Set([primaryUrl, payConfig.apiUrl].map((x) => (x || "").trim().replace(/\/$/, "")).filter(Boolean))
|
||||
new Set(
|
||||
[localUrl, primaryUrl, payConfig.apiUrl]
|
||||
.map((x) => (x || "").trim().replace(/\/$/, ""))
|
||||
.filter(Boolean)
|
||||
)
|
||||
);
|
||||
|
||||
for (const apiUrl of candidates) {
|
||||
@@ -280,29 +292,29 @@ export async function POST(request: NextRequest) {
|
||||
loginError = error instanceof Error ? error.message : "登录失败";
|
||||
}
|
||||
|
||||
let payjsResult: PayjsVipEmailResult | null = await checkVipByEmailFromPayjsapi(
|
||||
request,
|
||||
email,
|
||||
password,
|
||||
requestedAnonymousUserId || undefined
|
||||
);
|
||||
|
||||
// PB 登录失败时,尝试使用 payjsapi 返回的 token/record 兜底恢复
|
||||
if (!authData && payjsResult?.vip && payjsResult.token && payjsResult.record?.id) {
|
||||
console.log("[check-by-email] fallback by payjsapi token email=%s", email);
|
||||
return NextResponse.json({
|
||||
ok: true,
|
||||
vip: true,
|
||||
token: payjsResult.token,
|
||||
record: payjsResult.record,
|
||||
effectiveUserId: payjsResult.record.id,
|
||||
anonymousUserId: payjsResult.anonymousUserId ?? null,
|
||||
memosAccount: payjsResult.anonymousUserId ?? null,
|
||||
source: "payjsapi_token_fallback",
|
||||
});
|
||||
}
|
||||
let payjsResult: PayjsVipEmailResult | null = null;
|
||||
|
||||
if (!authData) {
|
||||
payjsResult = await checkVipByEmailFromPayjsapi(
|
||||
request,
|
||||
email,
|
||||
password,
|
||||
requestedAnonymousUserId || undefined
|
||||
);
|
||||
// PB 登录失败时,尝试使用 payjsapi 返回的 token/record 兜底恢复
|
||||
if (payjsResult?.vip && payjsResult.token && payjsResult.record?.id) {
|
||||
console.log("[check-by-email] fallback by payjsapi token email=%s", email);
|
||||
return NextResponse.json({
|
||||
ok: true,
|
||||
vip: true,
|
||||
token: payjsResult.token,
|
||||
record: payjsResult.record,
|
||||
effectiveUserId: payjsResult.record.id,
|
||||
anonymousUserId: payjsResult.anonymousUserId ?? null,
|
||||
memosAccount: payjsResult.anonymousUserId ?? null,
|
||||
source: "payjsapi_token_fallback",
|
||||
});
|
||||
}
|
||||
const msg = loginError || "登录失败";
|
||||
return NextResponse.json(
|
||||
{ ok: false, vip: false, error: msg },
|
||||
@@ -316,6 +328,14 @@ export async function POST(request: NextRequest) {
|
||||
});
|
||||
if (!adminToken) {
|
||||
// 管理员 token 获取失败时,降级到 payjsapi 结果,避免直接 500
|
||||
if (!payjsResult) {
|
||||
payjsResult = await checkVipByEmailFromPayjsapi(
|
||||
request,
|
||||
email,
|
||||
password,
|
||||
requestedAnonymousUserId || undefined
|
||||
);
|
||||
}
|
||||
if (payjsResult?.vip) {
|
||||
return NextResponse.json({
|
||||
ok: true,
|
||||
@@ -349,14 +369,12 @@ export async function POST(request: NextRequest) {
|
||||
);
|
||||
|
||||
if (!recovery.vip) {
|
||||
if (!payjsResult) {
|
||||
payjsResult = await checkVipByEmailFromPayjsapi(
|
||||
request,
|
||||
email,
|
||||
password,
|
||||
requestedAnonymousUserId || undefined
|
||||
);
|
||||
}
|
||||
payjsResult = await checkVipByEmailFromPayjsapi(
|
||||
request,
|
||||
email,
|
||||
password,
|
||||
requestedAnonymousUserId || undefined
|
||||
);
|
||||
recovery = await resolveRecovery(
|
||||
adminToken,
|
||||
email,
|
||||
|
||||
Reference in New Issue
Block a user