Recuperar cuenta: siempre por correo, y sin exigir Gmail
- Las 4 opciones exigían Gmail (`GMAIL_RE`), así que las cuentas ya creadas no podían recuperarse: de las 17 bnet que existen, 16 NO son de Gmail. Ahora solo se valida que sea un correo (`EMAIL_RE`), en un único sitio antes del tipo. El REGISTRO sigue exigiendo Gmail: eso no se toca. - «Contraseña» se pedía por nombre de usuario («15#1»); ahora por correo, como las otras tres. El campo del formulario deja de alternar texto/correo. En el flujo de contraseña, el correo que se guarda en `passwordreset` se toma de la BD y NO del tecleado: el verifier SRP6 de bnet se deriva del correo, así que `resetPassword` necesita exactamente la misma forma (MAYÚSCULAS) o generaría un verifier con el que no se podría entrar. Quedan sin uso y se borran: `usesUsername`, la clave de error `invalidUsername` y el texto `username`. `Recover.invalidEmail` decía «Introduce un correo de Gmail válido» y pasa a ser genérico. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -4,7 +4,7 @@ import { useState } from 'react'
|
||||
import { useTranslations } from 'next-intl'
|
||||
import { Turnstile } from '@/components/Turnstile'
|
||||
|
||||
const ERROR_KEYS = ['invalidEmail', 'invalidUsername', 'captchaFailed'] as const
|
||||
const ERROR_KEYS = ['invalidEmail', 'captchaFailed'] as const
|
||||
type RecoverType = 'password' | 'accountname' | 'securitytoken' | 'activation'
|
||||
|
||||
export function RecoverForm() {
|
||||
@@ -17,8 +17,6 @@ export function RecoverForm() {
|
||||
const [sent, setSent] = useState(false)
|
||||
const [message, setMessage] = useState<{ ok: boolean; text: string } | null>(null)
|
||||
|
||||
const usesUsername = type === 'password'
|
||||
|
||||
function changeType(newType: RecoverType) {
|
||||
setType(newType)
|
||||
setValue('')
|
||||
@@ -89,11 +87,9 @@ export function RecoverForm() {
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
{usesUsername ? (
|
||||
<input type="text" maxLength={20} placeholder={t('username')} required value={value} onChange={(e) => setValue(e.target.value)} />
|
||||
) : (
|
||||
<input type="email" maxLength={254} placeholder={t('email')} required value={value} onChange={(e) => setValue(e.target.value)} />
|
||||
)}
|
||||
{/* Las 4 opciones piden CORREO: con Battle.net la cuenta es el correo.
|
||||
La de contraseña pedía el usuario («15#1»), que ya no vale. */}
|
||||
<input type="email" maxLength={254} placeholder={t('email')} required value={value} onChange={(e) => setValue(e.target.value)} />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
Reference in New Issue
Block a user