Files
emall-api/FutureMailAPI/Controllers/TempFixController.cs

77 lines
2.5 KiB
C#
Raw Normal View History

2025-10-16 15:21:52 +08:00
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<IActionResult> 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<IActionResult> 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);
}
}
}