Exemple #1
0
        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));
        }