77 lines
2.5 KiB
C#
77 lines
2.5 KiB
C#
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);
|
||
}
|
||
}
|
||
} |