El correo sale en MAYÚSCULAS en los correos de token y activación
- Token: el asunto era «Token de seguridad - NightSpire» a secas. El original
decía «Token de seguridad de la cuenta {username} - {NOMBRE_SERVIDOR}»; la
reescritura se dejó la cuenta por el camino. Ese correo sale de
`session.bnetEmail`, que ya va normalizado, así que las MAYÚSCULAS son gratis.
- Activación: asunto y cuerpo pasan a normalizar el correo, para que se vea igual
que en el del token. El DESTINATARIO va sin normalizar: es la dirección tal
cual la escribió el usuario.
El correo de activación se manda desde DOS sitios: `registerAccount` y
`recover.ts` (el reenvío del enlace, «no me llegó»). Se cambian los dos o saldría
distinto según por dónde lo pidieras. Lo delató el build: /api/auth/activate
cargaba un chunk y /api/auth/recover otro con la versión vieja.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -137,10 +137,12 @@ export async function requestRecovery(type: string, value: string): Promise<Resu
|
||||
)
|
||||
if (rows[0]) {
|
||||
const link = `${site}/activate-account?act=${rows[0].hash}`
|
||||
// Mismo correo que manda `registerAccount`: normalizado (MAYÚSCULAS) al
|
||||
// mostrarlo, sin normalizar como destinatario.
|
||||
await sendMail(
|
||||
email,
|
||||
`Activación de la cuenta ${email} - NightSpire`,
|
||||
activationEmailHtml(email, link),
|
||||
`Activación de la cuenta ${normalizeEmail(email)} - NightSpire`,
|
||||
activationEmailHtml(normalizeEmail(email), link),
|
||||
)
|
||||
}
|
||||
} catch {
|
||||
|
||||
@@ -78,7 +78,14 @@ export async function registerAccount(input: RegisterInput): Promise<Result> {
|
||||
)
|
||||
|
||||
const link = `${process.env.SITE_URL}/activate-account?act=${hash}`
|
||||
await sendMail(email, `Activación de la cuenta ${email} - NightSpire`, activationEmailHtml(email, link))
|
||||
// El correo se muestra normalizado (MAYÚSCULAS) en el asunto y en el cuerpo, igual
|
||||
// que en el del token de seguridad, que lo saca de `session.bnetEmail` (ya normalizado).
|
||||
// El DESTINATARIO va sin normalizar: es la dirección tal cual la escribió el usuario.
|
||||
await sendMail(
|
||||
email,
|
||||
`Activación de la cuenta ${normalizeEmail(email)} - NightSpire`,
|
||||
activationEmailHtml(normalizeEmail(email), link),
|
||||
)
|
||||
|
||||
return { success: true }
|
||||
}
|
||||
|
||||
@@ -47,7 +47,14 @@ export async function requestSecurityToken(session: SessionData, ip: string): Pr
|
||||
)
|
||||
|
||||
// La cuenta es el correo: con Battle.net se entra con él, no con un usuario.
|
||||
await sendMail(email, 'Token de seguridad - NightSpire', securityTokenEmailHtml(email, token, ip || '0.0.0.0'))
|
||||
// Con la cuenta en el asunto, como el original: `email` es `session.bnetEmail`,
|
||||
// que va normalizado en MAYÚSCULAS (lo exige el SRP6 de bnet). Mismo patrón que
|
||||
// el asunto del correo de activación.
|
||||
await sendMail(
|
||||
email,
|
||||
`Token de seguridad de la cuenta ${email} - NightSpire`,
|
||||
securityTokenEmailHtml(email, token, ip || '0.0.0.0'),
|
||||
)
|
||||
|
||||
const [created] = await db(DB.default).query<RowDataPacket[]>(
|
||||
'SELECT created_at FROM securitytoken WHERE user_id = ? ORDER BY created_at DESC LIMIT 1',
|
||||
|
||||
Reference in New Issue
Block a user