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