Appearance
问题现象
在平台后台(Admin)登录页面输入正确的账号、密码及图片验证码后,系统持续提示: 验证码错误 或 验证码已过期,无法成功登录后台。
根本原因
EBAOZU 后台的图片验证码在生成时,将验证码字符与唯一的 Key 写入到 Redis 缓存中,前端在提交登录时携带对应 Key 进行比对校验。 当发生以下情况时,会导致验证码校验失败:
- 多项目缓存 Key 冲突:服务器上安装了多套 EBAOZU 或其他 ThinkPHP 系统,由于共用同一 Redis 库且使用相同的前缀(
CACHE.PREFIX),导致验证码数据被其他实例覆写或清除。 - Redis 连接异常或密码错误:Swoole 无法正常读写 Redis,验证码生成后未能成功存入 Redis 或读取超时。
- 前端 Key 传递丢失:反向代理未透传特定请求头或前端未携带验证码 key 参数。
- 服务器时钟不同步:服务器系统时间漂移,导致刚生成的验证码立即被判定为过期。
解决步骤
修改 .env 缓存前缀(核心操作)
打开项目根目录下的 .env 文件,找到缓存前缀配置,修改为当前站点独一无二的字符:
ini
[CACHE]
DRIVER = redis
PREFIX = ebaozu_admin_site1_
TAG_PREFIX = tag_ebaozu_site1_注意:同一服务器上部署的多套系统,
PREFIX和TAG_PREFIX必须各不相同!
检查 Redis 配置连通性
在 .env 中核对 Redis 连接配置:
ini
[REDIS]
REDIS_HOSTNAME = 127.0.0.1
PORT = 6379
REDIS_PASSWORD = 你的Redis密码
SELECT = 0- 若 Redis 无密码,
REDIS_PASSWORD请留空。 - 确保端口和密码与 Redis 实际运行配置一致。
重启 Swoole 服务
修改 .env 配置文件后,必须重启 Swoole 守护进程才能使缓存前缀与 Redis 连接配置生效:
bash
supervisorctl restart ebaozu_v4强制刷新浏览器
返回后台登录页面,按 Ctrl + F5 强制刷新页面重新获取最新的验证码图片,再次尝试登录。