21 lines
960 B
SQL
21 lines
960 B
SQL
-- Add email_verification_codes table for real email signup flow.
|
|
-- users.email_verified_at and users.last_login_at are also ensured defensively in app.php.
|
|
|
|
CREATE TABLE IF NOT EXISTS email_verification_codes (
|
|
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
|
email VARCHAR(190) NOT NULL,
|
|
purpose VARCHAR(32) NOT NULL DEFAULT 'signup',
|
|
password_hash VARCHAR(255) NOT NULL,
|
|
code_hash VARCHAR(255) NOT NULL,
|
|
attempt_count TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
|
max_attempts TINYINT UNSIGNED NOT NULL DEFAULT 5,
|
|
expires_at DATETIME NOT NULL,
|
|
verified_at DATETIME NULL,
|
|
consumed_at DATETIME NULL,
|
|
ip_address VARCHAR(64) NULL,
|
|
meta_note VARCHAR(255) NULL,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
INDEX idx_email_codes_email_purpose (email, purpose, created_at),
|
|
INDEX idx_email_codes_status (purpose, consumed_at, expires_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|