fix(auth): preserve phone identity across add-email retries

This commit is contained in:
InkCrow
2026-05-12 20:39:20 +08:00
parent 0b74e600c0
commit 67c111ed43
7 changed files with 183 additions and 2 deletions
+6
View File
@@ -574,6 +574,12 @@
}
}
break;
case 7:
await syncStepAccountIdentityFromPayload(payload);
if (payload.loginVerificationRequestedAt) {
await setState({ loginVerificationRequestedAt: payload.loginVerificationRequestedAt });
}
break;
case 8:
await setState({
...(payload.phoneVerification || payload.loginPhoneVerification ? {
+8 -1
View File
@@ -182,21 +182,28 @@
}
const displayedEmail = normalizeStep8VerificationTargetEmail(result?.displayedEmail || resolvedEmail);
let persistedState = latestState;
if (typeof persistRegistrationEmailState === 'function') {
await persistRegistrationEmailState(latestState, resolvedEmail, {
source: 'step8_add_email',
preserveAccountIdentity: true,
});
persistedState = typeof getState === 'function' ? await getState() : latestState;
} else {
await setState({
email: resolvedEmail,
step8VerificationTargetEmail: displayedEmail,
});
persistedState = {
...latestState,
email: resolvedEmail,
step8VerificationTargetEmail: displayedEmail,
};
}
return {
state: {
...latestState,
...persistedState,
email: resolvedEmail,
step8VerificationTargetEmail: displayedEmail,
},
+7
View File
@@ -263,6 +263,13 @@
const completionPayload = {
loginVerificationRequestedAt: result.loginVerificationRequestedAt || null,
};
if (currentIdentifierType === 'phone') {
completionPayload.accountIdentifierType = 'phone';
completionPayload.accountIdentifier = currentPhoneNumber;
completionPayload.signupPhoneNumber = currentPhoneNumber;
completionPayload.signupPhoneCompletedActivation = currentState?.signupPhoneCompletedActivation || null;
completionPayload.signupPhoneActivation = currentState?.signupPhoneActivation || null;
}
if (Object.prototype.hasOwnProperty.call(result || {}, 'skipLoginVerificationStep')) {
completionPayload.skipLoginVerificationStep = Boolean(result.skipLoginVerificationStep);
}