Skip to main content
web 服务(login-register 模块)会在邮箱登录、LDAP 登录、注册和密码重置时要求通过 reCAPTCHA v2(隐形)验证。请在 reCAPTCHA 中创建密钥并了解每项设置的作用;本页介绍如何将其放入 Kubernetes。

配置

1

将站点密钥放入 ConfigMap

站点密钥是公开的:每个登录页面都会显示它。
2

将密钥和设备历史密钥放入 Secret

请同时设置这两个密钥:如果只有站点密钥而没有密钥,每次检查都会失败,任何人都无法使用密码登录、注册或重置密码。DEVICE_HISTORY_SECRET 必须是 64 个十六进制字符;容器不会自动生成它。
3

应用并重启

然后检查每个 Pod 是否都能访问该端点。每次连接尝试大约一秒后 Pod 就会放弃,而无法完成检查的登录会因错误而失败:

多个副本

所有副本必须共享 DEVICE_HISTORY_SECRET,当它位于 Secret 中时即可满足这一点。如果值不同,在一个副本上已通过验证的浏览器在另一个副本上会再次遇到验证码。速率限制在 Redis 中跨所有副本统计。

在 Kubernetes 上的测试

针对 Google 验证端点的模拟服务(通过来自 overleaf-certs 的 NODE_EXTRA_CA_CERTS 信任),在 Kubernetes 1.37 上,我们针对 reCAPTCHA 的端到端测试全部通过(13 个用例):在一个副本上,登录、注册和密码重置在没有验证码或验证失败时均被拒绝,在验证通过时被接受;来自 DEVICE_HISTORY_SECRET 的设备历史记录让浏览器跳过验证码;以及 CAPTCHA_TRUSTED_USERS;在位于 HAProxy 之后的三个副本上,带验证码的 LDAP 登录。
最后修改于 2026年11月2日