using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using FutureMailAPI.Data; using FutureMailAPI.Models; using FutureMailAPI.Helpers; namespace FutureMailAPI.Controllers { [ApiController] [Route("api/v1/temp-fix")] public class TempFixController : ControllerBase { private readonly FutureMailDbContext _context; private readonly IPasswordHelper _passwordHelper; public TempFixController(FutureMailDbContext context, IPasswordHelper passwordHelper) { _context = context; _passwordHelper = passwordHelper; } [HttpPost("fix-passwords")] public async Task FixPasswordHashes() { try { // 获取所有用户 var users = await _context.Users.ToListAsync(); int fixedCount = 0; foreach (var user in users) { // 如果salt为空但passwordHash有值,说明需要修复 if (string.IsNullOrEmpty(user.Salt) && !string.IsNullOrEmpty(user.PasswordHash)) { // 使用默认密码重新设置密码哈希 var newPasswordHash = _passwordHelper.HashPassword("password123"); user.PasswordHash = newPasswordHash; user.Salt = _passwordHelper.GenerateSalt(); fixedCount++; } } await _context.SaveChangesAsync(); return Ok(new { success = true, message = $"已修复 {fixedCount} 个用户的密码哈希", fixedUsers = fixedCount }); } catch (Exception ex) { return BadRequest(new { success = false, message = $"修复失败: {ex.Message}" }); } } [HttpGet("users")] public async Task GetUsers() { var users = await _context.Users .Select(u => new { u.Id, u.Username, u.Email, PasswordHashLength = u.PasswordHash.Length, HasSalt = !string.IsNullOrEmpty(u.Salt) }) .ToListAsync(); return Ok(users); } } }