public async Task <IActionResult> Login([FromBody] Login model) { var user = _unitOfWork.GetUser(model.Username); if (user == null) { ModelState.AddModelError("Login", Errors.USER_NOT_FOUND); return(BadRequest(ModelState)); } if (!_passwordManager.Compare(user, model.Password)) { ModelState.AddModelError("Password", Errors.INVALID_PASSWORD); return(BadRequest(ModelState)); } ; var claims = await _unitOfWork.GetUserClaims(user); await _unitOfWork.UpdateLastLogin(user); var token = _jwtTokenProvider.CreateToken(user, claims); return(new ObjectResult(token)); }
public async Task <HttpResult <string> > Login(Login model, CancellationToken token = default(CancellationToken)) { var result = new HttpResult <string>(); var user = _unitOfWork.GetUser(model.Username); if (user == null) { result.Error = new System.Collections.Generic.Dictionary <string, string[]> { { "Username", new [] { "Username not found" } } }; return(result); } if (!_passwordManager.Compare(user, model.Password)) { result.Error = new System.Collections.Generic.Dictionary <string, string[]> { { "Password", new [] { "Invalid password" } } }; } ; var claims = await _unitOfWork.GetUserClaims(user); await _unitOfWork.UpdateLastLogin(user); result.Data = _jwtTokenProvider.CreateToken(user, claims); return(await Task.FromResult(result)); }
public async Task EditUser(EditUser model) { await RunTaskInTransaction(async() => { var entity = UserRepository.Get(model.Id); entity.UserName = model.Username; entity.Email = model.Email; entity.FirstName = model.FirstName; entity.LastName = model.LastName; entity.Image = model.Avatar; if (!string.IsNullOrEmpty(model.Password)) { var passwordHash = _passwordManager.GetHash(model.Password); if (!_passwordManager.Compare(entity, passwordHash)) { entity.PasswordHash = passwordHash; } } if (model.Role != null) { UserRoleRepository.RemoveRange(entity.UserRoles); var role = await RoleRepository.Find(model.Role.Name); await UserRoleRepository.Add( new UserRole { UserId = entity.Id, RoleId = role.Id }); } UserRepository.Update(entity); if (model.Claims != null) { UserClaimRepository.RemoveRange(entity.UserClaims); var claims = model.Claims.Select(cl => new UserClaim { UserId = entity.Id, ClaimType = cl.Type, ClaimValue = cl.Value }); await UserClaimRepository.AddRange(claims); } return(string.Empty); }); }
public async Task EditUser(EditUser model) { var transaction = _dbContext.Database.BeginTransaction(); try { var entity = await UserRepository.Get(model.Id); entity.UserName = model.Username; entity.Email = model.Email; entity.FirstName = model.FirstName; entity.LastName = model.LastName; entity.Image = model.Avatar; if (!string.IsNullOrEmpty(model.Password)) { var passwordHash = _passwordManager.GetHash(model.Password); if (!_passwordManager.Compare(entity, passwordHash)) { entity.PasswordHash = passwordHash; } } entity.UserRoles.Clear(); Save(); if (model.Role != null) { var role = await RoleRepository.Find(model.Role.Name); await UserRoleRepository.Add( new UserRole { User = entity, Role = role }); } UserRepository.Update(entity); Save(); entity.UserClaims.Clear(); if (model.Claims != null) { var claims = model.Claims.Select(cl => new UserClaim { UserId = entity.Id, ClaimType = cl.Type, ClaimValue = cl.Value }); await UserClaimRepository.AddRange(claims); } Save(); transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); throw ex; } }