Magento 2 后台登录页已经出现验证码输入框,但图片是空白或破图,通常不是管理员账号问题。验证码图片由服务端动态生成,并依赖 Session;图片请求被缓存、Cookie 丢失或 PHP 图像环境异常,都可能导致无法显示。

先打开验证码图片请求

在浏览器开发者工具的 Network 中刷新验证码,找到对应图片请求。重点看状态码和响应类型:

  • 404:后台路径、路由或 Web 服务器 rewrite 可能有问题。
  • 500:查看同一时间的 Magento、PHP-FPM 错误日志。
  • 200 但不是图片:请求可能被登录跳转或错误页面替代。
  • 图片正常返回但页面不显示:检查主题样式和 Content Security Policy。

确认配置范围

后台 CAPTCHA 配置可能按默认范围或网站范围保存。确认管理员登录验证码已启用,并检查“显示时机”是始终显示,还是达到失败次数后才显示。修改后清理配置缓存:

bin/magento cache:clean config

Session 不一致会让验证码失效

如果图片可以看到,但每次输入都提示错误,比较验证码图片请求和登录请求的 Cookie。多节点环境必须共享 Session,或正确配置粘性会话。使用 Redis 时还要检查 Session 数据库是否被缓存清理误删。

图像扩展与字体

验证码生成依赖 PHP 图像能力和字体文件。先确认 CLI 与 PHP-FPM 使用的 PHP 版本和扩展一致:

php -m | grep -Ei 'gd|imagick'
php -i | grep 'Loaded Configuration File'

CLI 有 GD 不代表 PHP-FPM 也已加载。字体文件缺失、部署权限不正确时,错误通常会出现在 PHP 或 Magento 日志中。

不要缓存验证码响应

CDN、Varnish 或 Nginx 如果缓存动态验证码图片,不同用户可能拿到同一张旧图。验证码路由应绕过公共缓存,同时保留正确的 Session Cookie。

修复后先用无痕窗口测试一次后台登录,再连续刷新验证码,确认图片和 Session 都会更新。不要为了绕过问题长期关闭后台验证码;如果问题发生在生产后台,应同时检查是否存在大量异常登录请求。