feat(connected-accounts): email-merge confirmation via emailed one-time code

When linking an email that belongs to another account, the backend now mails a
one-time code to it (merge_verification='email_code') instead of asking for that
account's password. Add a 6-digit code step: on the email_code response show the
code input, verify via authApi.verifyEmailMerge → on success redirect to /merge.
Preview/execute already go through apiClient (JWT), so they satisfy the new
initiator-bound merge endpoints. i18n in ru/en/zh/fa.
This commit is contained in:
c0mrade
2026-06-04 19:06:54 +03:00
parent c6fc167d80
commit 3224320095
6 changed files with 186 additions and 63 deletions

View File

@@ -4595,7 +4595,12 @@
},
"backToAccounts": "Back to accounts"
},
"emailMergePasswordRequired": "This email already belongs to another account. To merge the accounts, enter that account's password."
"emailMergePasswordRequired": "This email already belongs to another account. To merge the accounts, enter that account's password.",
"emailMergeCodeSent": "A confirmation code was sent to that email.",
"emailMergeCodeDescription": "This email already belongs to another account. We sent a code to it — enter it to confirm ownership and merge the accounts.",
"emailMergeCodeLabel": "Code from the email",
"emailMergeConfirm": "Confirm and merge",
"emailMergeCodeInvalid": "Invalid or expired code"
},
"theme": {
"colors": "Theme Colors",

View File

@@ -4140,7 +4140,12 @@
},
"backToAccounts": "بازگشت به فهرست حساب‌ها"
},
"emailMergePasswordRequired": "این ایمیل قبلاً به حساب دیگری تعلق دارد. برای ادغام حساب‌ها، رمز عبور آن حساب را وارد کنید."
"emailMergePasswordRequired": "این ایمیل قبلاً به حساب دیگری تعلق دارد. برای ادغام حساب‌ها، رمز عبور آن حساب را وارد کنید.",
"emailMergeCodeSent": "کد تأیید به آن ایمیل ارسال شد.",
"emailMergeCodeDescription": "این ایمیل قبلاً به حساب دیگری تعلق دارد. کدی به آن ارسال کردیم — برای تأیید مالکیت و ادغام حساب‌ها آن را وارد کنید.",
"emailMergeCodeLabel": "کد ارسال‌شده در ایمیل",
"emailMergeConfirm": "تأیید و ادغام",
"emailMergeCodeInvalid": "کد نامعتبر یا منقضی‌شده"
},
"theme": {
"colors": "رنگ‌های تم",

View File

@@ -5147,7 +5147,12 @@
},
"backToAccounts": "К списку аккаунтов"
},
"emailMergePasswordRequired": "Этот email уже привязан к другому аккаунту. Чтобы объединить аккаунты, введите пароль от него."
"emailMergePasswordRequired": "Этот email уже привязан к другому аккаунту. Чтобы объединить аккаунты, введите пароль от него.",
"emailMergeCodeSent": "Код подтверждения отправлен на тот email.",
"emailMergeCodeDescription": "Этот email уже привязан к другому аккаунту. Мы отправили на него код — введите его, чтобы подтвердить владение и объединить аккаунты.",
"emailMergeCodeLabel": "Код из письма",
"emailMergeConfirm": "Подтвердить и объединить",
"emailMergeCodeInvalid": "Неверный или просроченный код"
},
"theme": {
"colors": "Цвета темы",

View File

@@ -4139,7 +4139,12 @@
},
"backToAccounts": "返回账户列表"
},
"emailMergePasswordRequired": "该邮箱已属于另一个账户。要合并账户,请输入该账户的密码。"
"emailMergePasswordRequired": "该邮箱已属于另一个账户。要合并账户,请输入该账户的密码。",
"emailMergeCodeSent": "确认码已发送至该邮箱。",
"emailMergeCodeDescription": "该邮箱已属于另一个账户。我们已向其发送验证码——请输入以确认所有权并合并账户。",
"emailMergeCodeLabel": "邮件中的验证码",
"emailMergeConfirm": "确认并合并",
"emailMergeCodeInvalid": "验证码无效或已过期"
},
"theme": {
"colors": "主题颜色",