private static async Task InitializeMembers(IServiceProvider serviceProvider, AppDbContext db) { var config = serviceProvider.GetRequiredService <IConfiguration>(); var userManager = serviceProvider.GetRequiredService <UserManager <ApplicationUser> >(); var users = config.GetSection("Users:Members").GetChildren(); foreach (var user in users) { var userName = user["UserName"]; var userPass = user["Password"]; if (string.IsNullOrWhiteSpace(userPass)) { userPass = "******" + Guid.NewGuid(); } var userEmail = user["Email"]; var userFullName = user["FullName"]; var newUser = await userManager.FindByNameAsync(userName); if (newUser != null) { continue; } newUser = new ApplicationUser { UserName = userName, Email = userEmail, IsAdmin = false, IsManager = false, IsActive = true }; var userCreationResult = await userManager.CreateAsync(newUser, userPass); if (!userCreationResult.Succeeded) { continue; } var memberUser = await userManager.FindByNameAsync(newUser.UserName); await userManager.AddToRoleAsync(memberUser, Constants.UserRole); var newMember = new Member { UserId = memberUser.Id, FullName = userFullName }; await db.Members.AddAsync(newMember); await db.SaveChangesAsync(); // Assigns claims. var claims = ClaimsCreator.GetUserClaims(memberUser.UserName, userFullName, userEmail, Constants.UserRole, newMember.Id); await userManager.AddClaimsAsync(memberUser, claims); } }
private async Task <Member> CreateNewUserCommon(MemberView memberView, ApplicationUser newUser, string userRole) { var userByName = Uow.UserRepository.LinkedCacheGetByName(memberView.UserName); if (userByName != null) { throw new CoralTimeAlreadyExistsException($"User with userName {memberView.UserName} already exist"); } // Identity #1. Create User in db.AspNetUsers. var userCreationResult = await _userManager.CreateAsync(newUser, memberView.Password); if (!userCreationResult.Succeeded) { CheckIdentityResultErrors(userCreationResult); } // Identity #2. Create role for user in db.AspNetUserRoles. var memberUser = await _userManager.FindByNameAsync(newUser.UserName); var userCreateRoleResult = await _userManager.AddToRoleAsync(memberUser, UserRole); if (!userCreateRoleResult.Succeeded) { CheckIdentityResultErrors(userCreateRoleResult); } #region Set UserId to new Member. Save to Db. Get Member from Db with related entity User by UserId. // 1. Convert MemberView to Member. var newMember = Mapper.Map <MemberView, Member>(memberView); // 2. Assign UserId to Member (After Save, when you try to get entity from Db, before assign UserId to entity then it has Related Entity User). newMember.UserId = memberUser.Id; // 3. Save in Db. Uow.MemberRepository.Insert(newMember); Uow.Save(); // 4. Clear cache for Members. Uow.MemberRepository.LinkedCacheClear(); // 5. Get From Db -> Cache New Member. (Get entity With new created related entity - User) var memberByName = Uow.MemberRepository.LinkedCacheGetByName(memberView.UserName); #endregion // Identity #3. Create claims. Add Claims for user in AspNetUserClaims. var claimsUser = ClaimsCreator.GetUserClaims(memberUser.UserName, memberView.FullName, memberView.Email, userRole, memberByName.Id); var claimsUserResult = await _userManager.AddClaimsAsync(memberUser, claimsUser); if (!claimsUserResult.Succeeded) { CheckIdentityResultErrors(userCreateRoleResult); } return(memberByName); }
public void UpdateUserClaims(int memberId) { var memberById = Uow.MemberRepository.GetQueryWithIncludes().FirstOrDefault(m => m.Id == memberId); #region v1. //try //{ // memberById.User.Claims.Clear(); // Uow.MemberRepository.Update(memberById); // Uow.Save(); // // Assigns claims. // var claims = ClaimsCreator.GetUserClaims(memberById.User.UserName, memberById.FullName, memberById.User.Email, memberById.User.IsAdmin ? AdminRole : UserRole, memberId); // _userManager.AddClaimsAsync(memberById.User, claims).GetAwaiter().GetResult(); // ClearCacheMembers(); //} //catch (Exception) { } #endregion #region v2. //memberByName.User.Claims.Clear(); //memberByName.User.Claims.Add(new IdentityUserClaim<string> { ClaimType = JwtClaimTypes.Email, ClaimValue = memberByName.User.Email, }); //var updatememberByNameClaims = _userManager.UpdateAsync(memberByName.User).GetAwaiter().GetResult(); //if (!updatememberByNameClaims.Succeeded) //{ // BLHelpers.CheckMembersErrors(updatememberByNameClaims.Errors.Select(e => new IdentityErrorView // { // Code = e.Code, // Description = e.Description // })); //} #endregion var memberByNameClaims = _userManager.GetClaimsAsync(memberById.User).GetAwaiter().GetResult(); var removeClaimsForMember = _userManager.RemoveClaimsAsync(memberById.User, memberByNameClaims).GetAwaiter().GetResult(); if (!removeClaimsForMember.Succeeded) { CheckIdentityResultErrors(removeClaimsForMember); } var claimsForMemberNew = ClaimsCreator.GetUserClaims(memberById.User.UserName, memberById.FullName, memberById.User.Email, memberById.User.IsAdmin ? AdminRole : UserRole, memberById.Id); var addClaimsForMember = _userManager.AddClaimsAsync(memberById.User, claimsForMemberNew).GetAwaiter().GetResult(); if (!addClaimsForMember.Succeeded) { CheckIdentityResultErrors(addClaimsForMember); } }