public async ValueTask <IActionResult> SignIn([FromBody] AccountVm account) { ModelState.Remove(nameof(AccountVm.PasswordConf)); if (!string.IsNullOrEmpty(account?.Email)) { ModelState.Remove(nameof(AccountVm.Email)); } var user = await db.Users.FirstOrDefaultAsync(u => u.UserName == account.UserName || u.Email == account.Email || u.MobileNumber == account.Mobile); if (user is null) { logger.LogInformation("login request for not existing user"); ModelState.AddModelError(nameof(AccountVm.UserName), "User Not Found"); } else { var isPass = user.PasswordHash == hasher.Hash(account.Password); if (!isPass) { logger.LogInformation("login request failed because of UserName or password mismatch"); ModelState.AddModelError(nameof(AccountVm.Password), "UserName or Password mismatch"); } if (!user.IsActive) { ModelState.AddModelError(nameof(AccountVm.UserName), "user is deactivated"); } } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var jwt = await authManager.CreateJwtTokenAsync(user, user.UserName); logger.LogInformation("user signed in"); return(Ok(jwt)); }