#!/usr/bin/env bash # 重置用户密码脚本 # 用法: bash reset-password.sh set -euo pipefail EMAIL="zfc9393@163.com" PASSWORD="zfc123.." DB_USER="sub2api" DB_NAME="sub2api" # 自动查找 docker-compose 文件所在目录 SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" COMPOSE_DIR="$SCRIPT_DIR/deploy" if [ ! -f "$COMPOSE_DIR/docker-compose.yml" ]; then COMPOSE_DIR="$SCRIPT_DIR" fi cd "$COMPOSE_DIR" echo "=== 重置密码: $EMAIL ===" # 1. 确保 pgcrypto 扩展存在 docker compose exec -T postgres psql -U "$DB_USER" -d "$DB_NAME" -c \ "CREATE EXTENSION IF NOT EXISTS pgcrypto;" 2>/dev/null # 2. 检查用户是否存在 EXISTS=$(docker compose exec -T postgres psql -U "$DB_USER" -d "$DB_NAME" -t -A -c \ "SELECT COUNT(1) FROM users WHERE email = '$EMAIL';") if [ "$EXISTS" -gt 0 ]; then # 用户存在 → 更新密码 docker compose exec -T postgres psql -U "$DB_USER" -d "$DB_NAME" -c \ "UPDATE users SET password_hash = crypt('$PASSWORD', gen_salt('bf', 10)), updated_at = NOW() WHERE email = '$EMAIL';" echo "✅ 密码已重置" else # 用户不存在 → 创建管理员 docker compose exec -T postgres psql -U "$DB_USER" -d "$DB_NAME" -c \ "INSERT INTO users (email, password_hash, role, balance, concurrency, status, created_at, updated_at) VALUES ('$EMAIL', crypt('$PASSWORD', gen_salt('bf', 10)), 'admin', 0, 5, 'active', NOW(), NOW());" echo "✅ 管理员用户已创建" fi # 3. 验证 echo "" echo "=== 用户信息 ===" docker compose exec -T postgres psql -U "$DB_USER" -d "$DB_NAME" -c \ "SELECT id, email, role, status FROM users WHERE email = '$EMAIL';" echo "" echo "登录信息:" echo " 邮箱: $EMAIL" echo " 密码: $PASSWORD"