How it works
- When a visitor hits a path listed in
passive_paths, verifyngo sets a short-lived passive cookie and proxies the request through to your upstream without a challenge. - Each subsequent request to a
passive_pathsroute increments a per-visitor counter. - Once the counter exceeds
max_requestswithin therequest_window, the next request triggers a real CAPTCHA challenge. - After the visitor solves the CAPTCHA, verifyngo issues a full verified cookie and the visitor is never challenged again — until that cookie expires.
bypass_paths do not count toward the passive request budget.
Configuration
Enable progressive mode by adding aprogressive block to config.json:
boolean
default:"false"
Set to
true to turn on progressive mode.array of strings
The URL paths (as regular expressions) that participate in passive request counting. Only requests to matching paths increment the counter and receive a passive cookie. Keep this list to real page or navigation routes.
string
default:"30m"
How long the passive cookie lasts. After it expires the visitor’s counter resets and they start fresh. Accepts Go duration strings such as
"15m", "1h", or "2h30m".integer
default:"50"
The number of passive-path requests a visitor can make before a CAPTCHA challenge is triggered. Once the count goes over this threshold within
request_window, the next request becomes a challenge.string
default:"10m"
The rolling window over which requests are counted. Requests older than this window do not count toward the budget. Accepts Go duration strings such as
"5m", "10m", or "1h".Progressive mode and the verified cookie work together. Once a visitor has solved the CAPTCHA they receive a verified cookie, and progressive counting stops for them entirely until the verified cookie expires.