El enlace de activación vuelve a ser alfanumérico; avisar a qué correo se envió
Dos cosas que el port de Django cambió sin querer:
- El hash de activación se generaba con `randomBytes(16).toString('hex')`: 32
caracteres, sí, pero solo `0-9a-f`. El original era `get_random_string(32)`,
alfanumérico con mayúsculas y minúsculas (`?act=P4JHQDJey2jJDnEBnqUePI5O2qEFB1`).
- El aviso de cuenta creada era un genérico «Revisa tu correo», mientras que el
original decía qué cuenta se creó y a qué dirección fue el enlace. Se recupera
el formato de dos líneas (con id `create-response`, como el original).
El muestreo por rechazo del token de seguridad se sube a `lib/random-token.ts` y
lo comparten los dos generadores, que solo se diferencian en el alfabeto: letras
para el token que se teclea a mano, alfanumérico para el hash de la URL.
Verificado con 100.000 hashes: todos casan /^[A-Za-z0-9]{32}$/, salen los 62
caracteres y la desviación por carácter se queda en 1,3% (ruido).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
import crypto from 'node:crypto'
|
||||
import type { ResultSetHeader, RowDataPacket } from 'mysql2'
|
||||
import { db, DB } from './db'
|
||||
import { normalizeEmail, bnetMakeRegistration, gameMakeRegistration, makeGameAccountUsername } from './bnet'
|
||||
import { sendMail } from './mail'
|
||||
import { activationEmailHtml } from './emails'
|
||||
import { randomToken } from './random-token'
|
||||
|
||||
const GMAIL_RE = /^[a-zA-Z0-9._%+-]+@gmail\.com$/
|
||||
|
||||
@@ -66,7 +66,10 @@ export async function registerAccount(input: RegisterInput): Promise<Result> {
|
||||
}
|
||||
}
|
||||
|
||||
const hash = crypto.randomBytes(16).toString('hex') // 32 hex chars (col hash = CharField(32))
|
||||
// 32 alfanuméricos, como el `get_random_string(32)` original (col hash = varchar(32)).
|
||||
// Se portó como `randomBytes(16).toString('hex')`, que llenaba los 32 caracteres pero
|
||||
// solo con `0-9a-f`: cambiaba el formato del enlace de activación sin querer.
|
||||
const hash = randomToken(32)
|
||||
await db(DB.default).query(
|
||||
'INSERT INTO accountactivation (email, password, recruiter_id, hash, created_at, is_used, is_new_email_used) VALUES (?, ?, ?, ?, NOW(), 0, 0)',
|
||||
[email, password, recruiterId, hash],
|
||||
|
||||
Reference in New Issue
Block a user