Files
emall-api/FutureMailAPI/Controllers/TempFixController.cs
2025-10-16 15:21:52 +08:00

77 lines
2.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
}
}
}