Prefer SMS for auth OTP when email mailer is not configured.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-05 01:22:55 +03:30
co-authored by Cursor
parent c620d1d6d4
commit 78511a7d53
4 changed files with 83 additions and 29 deletions
+27 -12
View File
@@ -78,11 +78,12 @@ async function submitOtp() {
error.value = '';
loading.value = true;
try {
await auth.verifyRegister(
challenge.value.challengeId,
emailCode.value.trim(),
mobileCode.value.trim(),
);
const mobile = mobileCode.value.trim();
const email =
challenge.value.emailOtpRequired === false
? mobile
: emailCode.value.trim();
await auth.verifyRegister(challenge.value.challengeId, email, mobile);
await router.push('/');
} catch (e) {
error.value = apiError(e, 'تأیید کد ناموفق بود');
@@ -264,20 +265,30 @@ function backToForm() {
<template v-else>
<button type="button" class="back" @click="backToForm">بازگشت</button>
<h1>تأیید ایمیل و موبایل</h1>
<h1>تأیید هویت</h1>
<p class="lead">
کدهای یکبارمصرف ارسال‌شده به
{{ challenge?.maskedEmail }} و {{ challenge?.maskedMobile }} را وارد کنید.
<template v-if="challenge?.emailOtpRequired !== false">
کدهای یکبارمصرف ارسال‌شده به
{{ challenge?.maskedEmail }} و {{ challenge?.maskedMobile }} را وارد کنید.
</template>
<template v-else>
کد یکبارمصرف ارسال‌شده به {{ challenge?.maskedMobile }} را وارد کنید.
</template>
</p>
<p v-if="challenge?.devEmailCode || challenge?.devMobileCode" class="dev-hint">
کد ایمیل: <strong>{{ challenge?.devEmailCode }}</strong>
—
<template v-if="challenge?.emailOtpRequired !== false">
کد ایمیل: <strong>{{ challenge?.devEmailCode }}</strong>
—
</template>
کد موبایل: <strong>{{ challenge?.devMobileCode }}</strong>
</p>
<form class="form" @submit.prevent="submitOtp">
<div class="grid-2">
<div class="field">
<div
class="grid-2"
:class="{ 'single-otp': challenge?.emailOtpRequired === false }"
>
<div v-if="challenge?.emailOtpRequired !== false" class="field">
<label for="emailCode">کد ایمیل</label>
<input
id="emailCode"
@@ -599,6 +610,10 @@ h1 {
.grid-2 {
grid-template-columns: 1fr 1fr;
}
.grid-2.single-otp {
grid-template-columns: 1fr;
}
}
@media (min-width: 900px) {