Files
chinese-family-tree-2/test-change-password.sh
T
freedakgmail e92884ae53 0.0.1.0
2025-11-23 03:07:39 +08:00

102 lines
3.7 KiB
Bash
Executable File

#!/bin/bash
echo "🔐 测试修改密码功能"
echo "===================="
echo ""
BASE_URL="http://localhost:3000"
# 1. 注册测试用户
TIMESTAMP=$(date +%s)
TEST_EMAIL="password-test-$TIMESTAMP@example.com"
TEST_PASSWORD="oldpassword123"
NEW_PASSWORD="newpassword123"
echo "1️⃣ 注册测试用户: $TEST_EMAIL"
REGISTER_RESPONSE=$(curl -s -X POST "$BASE_URL/api/auth/register" \
-H "Content-Type: application/json" \
-d "{\"email\":\"$TEST_EMAIL\",\"password\":\"$TEST_PASSWORD\",\"name\":\"密码测试用户\"}")
echo "注册响应: $REGISTER_RESPONSE"
echo ""
# 2. 获取 CSRF token
echo "2️⃣ 获取 CSRF token..."
CSRF_RESPONSE=$(curl -s -c cookies.txt -b cookies.txt "$BASE_URL/api/auth/csrf")
CSRF_TOKEN=$(echo $CSRF_RESPONSE | grep -o '"csrfToken":"[^"]*"' | cut -d'"' -f4)
echo "CSRF Token: $CSRF_TOKEN"
echo ""
# 3. 登录
echo "3️⃣ 登录..."
LOGIN_RESPONSE=$(curl -s -c cookies.txt -b cookies.txt -X POST "$BASE_URL/api/auth/callback/credentials" \
-H "Content-Type: application/json" \
-d "{\"email\":\"$TEST_EMAIL\",\"password\":\"$TEST_PASSWORD\",\"csrfToken\":\"$CSRF_TOKEN\",\"callbackUrl\":\"$BASE_URL\",\"json\":true}")
echo "登录成功"
echo ""
# 4. 测试修改密码(错误的当前密码)
echo "4️⃣ 测试错误的当前密码..."
WRONG_PASSWORD_RESPONSE=$(curl -s -b cookies.txt -X POST "$BASE_URL/api/user/change-password" \
-H "Content-Type: application/json" \
-d "{\"currentPassword\":\"wrongpassword\",\"newPassword\":\"$NEW_PASSWORD\",\"confirmPassword\":\"$NEW_PASSWORD\"}")
echo "响应: $WRONG_PASSWORD_RESPONSE"
echo ""
# 5. 测试修改密码(密码不一致)
echo "5️⃣ 测试密码不一致..."
MISMATCH_RESPONSE=$(curl -s -b cookies.txt -X POST "$BASE_URL/api/user/change-password" \
-H "Content-Type: application/json" \
-d "{\"currentPassword\":\"$TEST_PASSWORD\",\"newPassword\":\"$NEW_PASSWORD\",\"confirmPassword\":\"different123\"}")
echo "响应: $MISMATCH_RESPONSE"
echo ""
# 6. 测试修改密码(成功)
echo "6️⃣ 正确修改密码..."
SUCCESS_RESPONSE=$(curl -s -b cookies.txt -X POST "$BASE_URL/api/user/change-password" \
-H "Content-Type: application/json" \
-d "{\"currentPassword\":\"$TEST_PASSWORD\",\"newPassword\":\"$NEW_PASSWORD\",\"confirmPassword\":\"$NEW_PASSWORD\"}")
echo "响应: $SUCCESS_RESPONSE"
echo ""
# 7. 验证新密码可以登录
echo "7️⃣ 验证新密码登录..."
rm -f cookies.txt
# 重新获取 CSRF token
CSRF_RESPONSE=$(curl -s -c cookies.txt -b cookies.txt "$BASE_URL/api/auth/csrf")
CSRF_TOKEN=$(echo $CSRF_RESPONSE | grep -o '"csrfToken":"[^"]*"' | cut -d'"' -f4)
# 使用新密码登录
NEW_LOGIN_RESPONSE=$(curl -s -c cookies.txt -b cookies.txt -X POST "$BASE_URL/api/auth/callback/credentials" \
-H "Content-Type: application/json" \
-d "{\"email\":\"$TEST_EMAIL\",\"password\":\"$NEW_PASSWORD\",\"csrfToken\":\"$CSRF_TOKEN\",\"callbackUrl\":\"$BASE_URL\",\"json\":true}")
echo "使用新密码登录成功"
echo ""
# 8. 验证旧密码无法登录
echo "8️⃣ 验证旧密码无法登录..."
rm -f cookies.txt
# 重新获取 CSRF token
CSRF_RESPONSE=$(curl -s -c cookies.txt -b cookies.txt "$BASE_URL/api/auth/csrf")
CSRF_TOKEN=$(echo $CSRF_RESPONSE | grep -o '"csrfToken":"[^"]*"' | cut -d'"' -f4)
# 使用旧密码登录(应该失败)
OLD_LOGIN_RESPONSE=$(curl -s -w "\n%{http_code}" -c cookies.txt -b cookies.txt -X POST "$BASE_URL/api/auth/callback/credentials" \
-H "Content-Type: application/json" \
-d "{\"email\":\"$TEST_EMAIL\",\"password\":\"$TEST_PASSWORD\",\"csrfToken\":\"$CSRF_TOKEN\",\"callbackUrl\":\"$BASE_URL\",\"json\":true}")
echo "旧密码登录响应: $OLD_LOGIN_RESPONSE"
echo ""
# 清理
rm -f cookies.txt
echo "✅ 修改密码功能测试完成!"