Hey folks 👋
Welcome back. In Part 3 we built all five auth endpoints, added Rack-Attack rate limiting, hardened the HTTP headers with secure_headers, and set up Lograge for structured logs. The API is functional and most of the security checklist is green.
But we left three vectors partially open, and we made a design debt: hand-rolling response hashes in every controller. Today we close all of that.
Here is what we are doing in Part 4:
Explicit CSRF tokens for every state-changing endpoint






