5.7 KiB
5.7 KiB
验证码快速修复指南
🔍 问题诊断
你的验证码API 没有返回Set-Cookie,说明配置没有正确应用。
测试结果:
curl -si https://cs.workyai.cn/api/captcha
HTTP/2 200
❌ 没有 Set-Cookie 响应头
🎯 解决方案(按顺序检查)
步骤1:检查Nginx配置文件
# 在服务器上运行
cd /root/vue-driven-cloud-storage # 或你的项目路径
# 方法1:查找配置文件
find /etc/nginx -name "*.conf" -exec grep -l "workyai.cn\|40001" {} \;
# 方法2:查看nginx主配置
nginx -T | grep -A 30 "location /api"
检查项:
- 是否有
proxy_set_header Cookie $http_cookie; - 是否有
proxy_pass_header Set-Cookie;
步骤2:手动添加Cookie配置
假设你的Nginx配置文件是 /etc/nginx/conf.d/xxx.conf:
# 1. 找到配置文件
nginx -T | grep -B 5 "location /api" | grep "# configuration file"
# 2. 编辑配置文件(替换为你的实际路径)
vim /etc/nginx/conf.d/玩玩云.conf
# 3. 在 location /api 块中,找到这一行:
# proxy_set_header X-Forwarded-Proto $scheme;
#
# 在它后面添加3行:
# Cookie传递配置(验证码session需要)
proxy_set_header Cookie $http_cookie;
proxy_pass_header Set-Cookie;
# 4. 保存并测试
nginx -t
# 5. 如果测试通过,重新加载
nginx -s reload
步骤3:验证修改是否生效
# 测试验证码API是否返回Set-Cookie
curl -si https://cs.workyai.cn/api/captcha | grep -i "set-cookie"
# 应该看到类似:
# Set-Cookie: captcha.sid=s%3A...; Path=/; HttpOnly; SameSite=Lax
如果还是没有,继续下一步。
步骤4:检查后端是否正确启动
# 检查后端进程
ps aux | grep "node.*server.js"
# 检查后端日志
pm2 logs backend # 如果使用pm2
# 或
tail -f /path/to/backend/logs/error.log
# 重启后端
pm2 restart backend # 如果使用pm2
# 或
pkill -f "node server.js"
cd /path/to/backend
node server.js > /dev/null 2>&1 &
步骤5:检查后端依赖
cd /path/to/backend
# 检查session依赖是否安装
npm list express-session svg-captcha
# 如果未安装,安装它们
npm install express-session svg-captcha
# 重启后端
pm2 restart backend
步骤6:检查.env配置
cd /path/to/backend
# 查看.env文件
cat .env
# 确保有这些配置(可选,有默认值)
# SESSION_SECRET=your-random-secret
# COOKIE_SECURE=false # 或true(如果是HTTPS)
🔧 完整的修复脚本
在服务器上创建并运行:
cat > fix_captcha.sh << 'SCRIPT_EOF'
#!/bin/bash
set -e
echo "🔧 验证码快速修复脚本"
echo "================================"
echo ""
# 1. 查找Nginx配置
echo "1. 查找Nginx配置文件..."
NGINX_CONF=$(find /etc/nginx /www/server -name "*.conf" -exec grep -l "location /api" {} \; 2>/dev/null | grep -v backup | head -1)
if [[ -z "$NGINX_CONF" ]]; then
echo "❌ 未找到Nginx配置文件"
exit 1
fi
echo "找到配置: $NGINX_CONF"
echo ""
# 2. 检查是否已有Cookie配置
if grep -q "proxy_set_header Cookie" "$NGINX_CONF"; then
echo "✅ Cookie配置已存在"
else
echo "❌ Cookie配置缺失,正在添加..."
# 备份
cp "$NGINX_CONF" "${NGINX_CONF}.backup.$(date +%Y%m%d%H%M%S)"
# 添加Cookie配置
sed -i '/proxy_set_header X-Forwarded-Proto \$scheme;/a\
\
# Cookie传递配置(验证码session需要)\
proxy_set_header Cookie $http_cookie;\
proxy_pass_header Set-Cookie;' "$NGINX_CONF"
echo "✅ Cookie配置已添加"
fi
echo ""
# 3. 测试Nginx配置
echo "3. 测试Nginx配置..."
if nginx -t; then
echo "✅ Nginx配置测试通过"
else
echo "❌ Nginx配置测试失败"
exit 1
fi
echo ""
# 4. 重新加载Nginx
echo "4. 重新加载Nginx..."
nginx -s reload && echo "✅ Nginx已重新加载" || echo "❌ Nginx重新加载失败"
echo ""
# 5. 验证修复
echo "5. 验证验证码API..."
sleep 2
if curl -si http://localhost:40001/api/captcha 2>&1 | grep -q "Set-Cookie"; then
echo "✅ 验证码API正常返回Set-Cookie"
else
echo "⚠️ 验证码API未返回Set-Cookie,可能需要检查后端"
fi
echo ""
echo "================================"
echo "✅ 修复完成!"
echo ""
echo "请清除浏览器缓存后重新测试"
SCRIPT_EOF
chmod +x fix_captcha.sh
sudo bash fix_captcha.sh
📝 检查清单
执行以下检查:
Nginx配置
# 查看location /api配置
nginx -T 2>/dev/null | grep -A 20 "location /api"
# 必须包含:
# ✓ proxy_set_header Cookie $http_cookie;
# ✓ proxy_pass_header Set-Cookie;
后端配置
# 检查后端是否运行
curl http://localhost:40001/api/health
# 检查session依赖
cd /path/to/backend && npm list | grep session
# 必须有:
# ✓ express-session@x.x.x
# ✓ svg-captcha@x.x.x
Cookie传递
# 完整测试
curl -v http://localhost:40001/api/captcha 2>&1 | grep -i "set-cookie"
# 必须看到:
# < Set-Cookie: captcha.sid=...
🆘 仍然不行?
如果以上步骤都完成了还是不行,请提供:
- Nginx配置内容
nginx -T 2>/dev/null | grep -A 30 "location /api"
- 后端日志
pm2 logs backend --lines 50
- 验证码API响应
curl -vi http://localhost:40001/api/captcha
- 完整的curl测试
# 生成验证码
curl -vi https://cs.workyai.cn/api/captcha -c cookies.txt
# 查看cookie
cat cookies.txt
# 测试登录
curl -vi https://cs.workyai.cn/api/login \
-b cookies.txt \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"wrong","captcha":"1234"}'