@@ -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