Skip to content

Commit c6a93af

Browse files
committed
Optimized the login verification logic
1 parent ad116bb commit c6a93af

File tree

1 file changed

+24
-32
lines changed

1 file changed

+24
-32
lines changed

OpenBioCardServer/Controllers/Classic/ClassicAuthController.cs

Lines changed: 24 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -115,61 +115,53 @@ public async Task<IActionResult> SignIn([FromBody] ClassicSignInRequest request)
115115
{
116116
try
117117
{
118-
var rootUsername = _config["AuthSettings:RootUsername"];
119-
var rootPassword = _config["AuthSettings:RootPassword"];
120-
121-
// Handle root user login
122-
if (request.Username == rootUsername)
118+
// 验证必填字段
119+
if (string.IsNullOrWhiteSpace(request.Username) ||
120+
string.IsNullOrWhiteSpace(request.Password))
123121
{
124-
if (request.Password == rootPassword)
125-
{
126-
var rootAccount = await _authService.GetRootAccountAsync();
127-
if (rootAccount == null)
128-
{
129-
return StatusCode(500, new { error = "Root account not initialized" });
130-
}
131-
132-
var token = await _authService.CreateTokenAsync(rootAccount);
133-
134-
// Update last login timestamp
135-
rootAccount.LastLogin = DateTime.UtcNow;
136-
await _context.SaveChangesAsync();
137-
138-
_logger.LogInformation("Root user logged in");
139-
140-
return Ok(new ClassicTokenResponse { Token = token });
141-
}
142-
143-
return Unauthorized(new { error = "Invalid username or password" });
122+
return BadRequest(new { error = "Username and password are required" });
144123
}
145124

146-
// Handle regular user login
125+
// 查询账户
147126
var account = await _context.Accounts
148127
.FirstOrDefaultAsync(a => a.UserName == request.Username);
149128

129+
// 账户不存在
150130
if (account == null)
151131
{
132+
// 使用通用错误消息,防止用户名枚举攻击
152133
return Unauthorized(new { error = "Invalid username or password" });
153134
}
154135

136+
// 验证密码(所有用户统一使用哈希验证)
155137
if (!PasswordHasher.VerifyPassword(request.Password, account.PasswordHash, account.PasswordSalt))
156138
{
157139
return Unauthorized(new { error = "Invalid username or password" });
158140
}
159141

160-
var userToken = await _authService.CreateTokenAsync(account);
161-
162-
// Update last login timestamp
142+
// 生成 Token
143+
var token = await _authService.CreateTokenAsync(account);
144+
145+
// 更新最后登录时间
163146
account.LastLogin = DateTime.UtcNow;
164147
await _context.SaveChangesAsync();
165148

166-
_logger.LogInformation("User logged in: {Username}", request.Username);
149+
// 记录日志(区分Root和普通用户)
150+
if (account.Type == UserType.Root)
151+
{
152+
_logger.LogInformation("Root user logged in");
153+
}
154+
else
155+
{
156+
_logger.LogInformation("User logged in: {Username} (Type: {Type})",
157+
request.Username, account.Type);
158+
}
167159

168-
return Ok(new ClassicTokenResponse { Token = userToken });
160+
return Ok(new ClassicTokenResponse { Token = token });
169161
}
170162
catch (Exception ex)
171163
{
172-
_logger.LogError(ex, "Error during sign in");
164+
_logger.LogError(ex, "Error during sign in for user: {Username}", request.Username);
173165
return StatusCode(503, new { error = "Service temporarily unavailable" });
174166
}
175167
}

0 commit comments

Comments
 (0)