public static ApplicationUser ToDataModel(this ApplicationUserExtended user) { var dbUser = new ApplicationUser(); var id = dbUser.Id; dbUser.InjectFrom(user); dbUser.Id = id; if (user.Logins != null) { foreach (var login in user.Logins) { var userLogin = dbUser.Logins.FirstOrDefault(l => l.LoginProvider == login.LoginProvider); if (userLogin != null) { userLogin.ProviderKey = login.ProviderKey; } else { dbUser.Logins.Add(new IdentityUserLogin { LoginProvider = login.LoginProvider, ProviderKey = login.ProviderKey, UserId = dbUser.Id }); } } } return dbUser; }
public static void Patch(this ApplicationUserExtended user, ApplicationUser dbUser) { var patchInjection = new PatchInjection<ApplicationUser>(x => x.Id, x => x.PasswordHash, x => x.SecurityStamp, x => x.UserName, x => x.Email, x => x.PhoneNumber); dbUser.InjectFrom(patchInjection, user); // Copy logins if (user.Logins != null) { var changedLogins = user.Logins.Select(x => new IdentityUserLogin { LoginProvider = x.LoginProvider, ProviderKey = x.ProviderKey, UserId = dbUser.Id }).ToList(); var comparer = AnonymousComparer.Create((IdentityUserLogin x) => x.LoginProvider); dbUser.Logins.Patch(changedLogins, comparer, (sourceItem, targetItem) => { targetItem.ProviderKey = sourceItem.ProviderKey; }); } }
public async Task<IHttpActionResult> CreateAsync(ApplicationUserExtended user) { var dbUser = new ApplicationUser(); dbUser.InjectFrom(user); IdentityResult result; if (!string.IsNullOrEmpty(user.Password)) { result = await UserManager.CreateAsync(dbUser, user.Password); } else { result = await UserManager.CreateAsync(dbUser); } if (result.Succeeded) { using (var repository = _platformRepository()) { var account = new AccountEntity() { Id = user.Id, UserName = user.UserName, MemberId = user.MemberId, AccountState = AccountState.Approved, RegisterType = (RegisterType)user.UserType, StoreId = user.StoreId }; if (user.Roles != null) { foreach (var role in user.Roles) { account.RoleAssignments.Add(new RoleAssignmentEntity { RoleId = role.Id, AccountId = account.Id }); } } repository.Add(account); repository.UnitOfWork.Commit(); } return Ok(); } else { return BadRequest(String.Join(" ", result.Errors)); } }
public async Task<IHttpActionResult> Register(ApplicationUserExtended user) { if (user == null) { return BadRequest(); } var dbUser = new ApplicationUser(); dbUser.InjectFrom(user); foreach (var login in user.Logins) { var userLogin = dbUser.Logins.FirstOrDefault(l => l.LoginProvider == login.LoginProvider); if (userLogin != null) { userLogin.ProviderKey = login.ProviderKey; } else { dbUser.Logins.Add(new Microsoft.AspNet.Identity.EntityFramework.IdentityUserLogin { LoginProvider = login.LoginProvider, ProviderKey = login.ProviderKey, UserId = dbUser.Id }); } } IdentityResult result = null; if (string.IsNullOrEmpty(user.Password)) { result = await UserManager.CreateAsync(dbUser); } else { result = await UserManager.CreateAsync(dbUser, user.Password); } if (result.Succeeded) { using (var repository = _platformRepository()) { var account = new AccountEntity { Id = user.Id, UserName = user.UserName, MemberId = user.MemberId, AccountState = AccountState.Approved, RegisterType = (RegisterType)user.UserType, StoreId = user.StoreId, }; repository.Add(account); repository.UnitOfWork.Commit(); } } return Ok(result); }