📖 添加验证码快速修复指南
This commit is contained in:
268
CAPTCHA_QUICK_FIX.md
Normal file
268
CAPTCHA_QUICK_FIX.md
Normal file
@@ -0,0 +1,268 @@
|
||||
# 验证码快速修复指南
|
||||
|
||||
## 🔍 问题诊断
|
||||
|
||||
你的验证码API **没有返回Set-Cookie**,说明配置没有正确应用。
|
||||
|
||||
测试结果:
|
||||
```
|
||||
curl -si https://cs.workyai.cn/api/captcha
|
||||
HTTP/2 200
|
||||
❌ 没有 Set-Cookie 响应头
|
||||
```
|
||||
|
||||
## 🎯 解决方案(按顺序检查)
|
||||
|
||||
### 步骤1:检查Nginx配置文件
|
||||
|
||||
```bash
|
||||
# 在服务器上运行
|
||||
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`:
|
||||
|
||||
```bash
|
||||
# 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:验证修改是否生效
|
||||
|
||||
```bash
|
||||
# 测试验证码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:检查后端是否正确启动
|
||||
|
||||
```bash
|
||||
# 检查后端进程
|
||||
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:检查后端依赖
|
||||
|
||||
```bash
|
||||
cd /path/to/backend
|
||||
|
||||
# 检查session依赖是否安装
|
||||
npm list express-session svg-captcha
|
||||
|
||||
# 如果未安装,安装它们
|
||||
npm install express-session svg-captcha
|
||||
|
||||
# 重启后端
|
||||
pm2 restart backend
|
||||
```
|
||||
|
||||
### 步骤6:检查.env配置
|
||||
|
||||
```bash
|
||||
cd /path/to/backend
|
||||
|
||||
# 查看.env文件
|
||||
cat .env
|
||||
|
||||
# 确保有这些配置(可选,有默认值)
|
||||
# SESSION_SECRET=your-random-secret
|
||||
# COOKIE_SECURE=false # 或true(如果是HTTPS)
|
||||
```
|
||||
|
||||
## 🔧 完整的修复脚本
|
||||
|
||||
在服务器上创建并运行:
|
||||
|
||||
```bash
|
||||
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配置
|
||||
```bash
|
||||
# 查看location /api配置
|
||||
nginx -T 2>/dev/null | grep -A 20 "location /api"
|
||||
|
||||
# 必须包含:
|
||||
# ✓ proxy_set_header Cookie $http_cookie;
|
||||
# ✓ proxy_pass_header Set-Cookie;
|
||||
```
|
||||
|
||||
### 后端配置
|
||||
```bash
|
||||
# 检查后端是否运行
|
||||
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传递
|
||||
```bash
|
||||
# 完整测试
|
||||
curl -v http://localhost:40001/api/captcha 2>&1 | grep -i "set-cookie"
|
||||
|
||||
# 必须看到:
|
||||
# < Set-Cookie: captcha.sid=...
|
||||
```
|
||||
|
||||
## 🆘 仍然不行?
|
||||
|
||||
如果以上步骤都完成了还是不行,请提供:
|
||||
|
||||
1. **Nginx配置内容**
|
||||
```bash
|
||||
nginx -T 2>/dev/null | grep -A 30 "location /api"
|
||||
```
|
||||
|
||||
2. **后端日志**
|
||||
```bash
|
||||
pm2 logs backend --lines 50
|
||||
```
|
||||
|
||||
3. **验证码API响应**
|
||||
```bash
|
||||
curl -vi http://localhost:40001/api/captcha
|
||||
```
|
||||
|
||||
4. **完整的curl测试**
|
||||
```bash
|
||||
# 生成验证码
|
||||
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"}'
|
||||
```
|
||||
|
||||
## 📞 提供这些信息后我可以进一步帮助你!
|
||||
Reference in New Issue
Block a user