-- Migration 008: CSRF Tokens -- Creates table for storing CSRF tokens for protection against cross-site request forgery CREATE TABLE IF NOT EXISTS csrf_tokens ( id SERIAL PRIMARY KEY, user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, token_hash VARCHAR(255) NOT NULL, expires_at TIMESTAMP WITH TIME ZONE NOT NULL, client_ip VARCHAR(45), created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -- Index for fast lookup by user_id and expiration CREATE INDEX IF NOT EXISTS idx_csrf_tokens_user_id ON csrf_tokens(user_id); CREATE INDEX IF NOT EXISTS idx_csrf_tokens_expires_at ON csrf_tokens(expires_at); -- Cleanup old tokens automatically (run periodically via cron or app) COMMENT ON TABLE csrf_tokens IS 'Stores hashed CSRF tokens for protecting state-changing operations';