Skip to main content
The web service (the login-register module) asks for a reCAPTCHA v2 (invisible) on the email login, the LDAP login, registration and password reset. Create the key and read what each setting does in reCAPTCHA; this page puts it into Kubernetes.

Configuration

1

Site key into the ConfigMap

The site key is public: every login page shows it.
2

Secret key and device history key into the Secret

Set both keys together: with the site key but no secret key, every check fails and nobody can log in with a password, register or reset a password. DEVICE_HISTORY_SECRET must be 64 hex characters; the container does not generate it.
3

Apply and restart

Then check that every pod reaches the endpoint. The pods give up after about one second per connection attempt, and a login whose check cannot be made fails with an error:

Several replicas

All replicas must share DEVICE_HISTORY_SECRET, which they do when it is in the Secret. With different values a browser that passed on one replica would get the captcha again on another. The rate limits are counted in Redis across all replicas.

Tested on Kubernetes

Against a mock of Google’s verification endpoint (trusted through NODE_EXTRA_CA_CERTS from overleaf-certs), on Kubernetes 1.37, our end-to-end tests for reCAPTCHA pass (13 cases): on one replica, login, registration and password reset each refused without a captcha or with a failed one and accepted with a passed one, the device history from DEVICE_HISTORY_SECRET letting a browser skip the captcha, and CAPTCHA_TRUSTED_USERS; on three replicas behind HAProxy, the LDAP login with the captcha.
Last modified on November 2, 2026