public virtual async Task<ContactIdentityResult> RegisterAccount(ApplicationUser user) { if (user == null) { throw new ArgumentNullException("user"); } ContactIdentityResult contactResult = null; IdentityResult result = null; CustomerContact contact = null; if (String.IsNullOrEmpty(user.Password)) { throw new MissingFieldException("Password"); } if (String.IsNullOrEmpty(user.Email)) { throw new MissingFieldException("Email"); } if (_userManager.FindByEmail(user.Email) != null) { result = new IdentityResult(new string[] { _localizationService.GetString("/Registration/Form/Error/UsedEmail") }); } else { result = await _userManager.CreateAsync(user, user.Password); if (result.Succeeded) { await _signInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false); contact = CreateCustomerContact(user); } } contactResult = new ContactIdentityResult(result, contact); return contactResult; }
private CustomerContact CreateCustomerContact(ApplicationUser user) { if (user == null) { throw new ArgumentNullException("user"); } CustomerContact contact = CustomerContact.CreateInstance(); // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771 // Send an email with this link // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme); // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>"); if (!String.IsNullOrEmpty(user.FirstName) || !String.IsNullOrEmpty(user.LastName)) { contact.FullName = String.Format("{0} {1}", user.FirstName, user.LastName); } contact.PrimaryKeyId = new Mediachase.BusinessFoundation.Data.PrimaryKeyId(new Guid(user.Id)); contact.FirstName = user.FirstName; contact.LastName = user.LastName; contact.Email = user.Email; contact.UserId = "String:" + user.Email; // The UserId needs to be set in the format "String:{email}". Else a duplicate CustomerContact will be created later on. contact.RegistrationSource = user.RegistrationSource; if (user.Addresses != null) { foreach (var address in user.Addresses) { contact.AddContactAddress(address); } } // The contact, or more likely its related addresses, must be saved to the database before we can set the preferred // shipping and billing addresses. Using an address id before its saved will throw an exception because its value // will still be null. contact.SaveChanges(); // Once the contact has been saved we can look for any existing addresses. CustomerAddress defaultAddress = contact.ContactAddresses.FirstOrDefault(); if (defaultAddress != null) { // If an addresses was found, it will be used as default for shipping and billing. contact.PreferredShippingAddress = defaultAddress; contact.PreferredBillingAddress = defaultAddress; // Save the address preferences also. contact.SaveChanges(); } return contact; }
public void ResetPassword_WhenValidInput_ShouldRedirectToResetPasswordConfirmationView() { string code = "A1B2C3"; string newPassword = "******"; string email = "*****@*****.**"; ApplicationUser user = new ApplicationUser { Email = email, Id = Guid.NewGuid().ToString() }; ResetPasswordViewModel viewModel = new ResetPasswordViewModel { Code = code, Email = email, Password = newPassword, Password2 = newPassword }; _userManagerMock.Setup(x => x.FindByNameAsync(email)).Returns(Task.FromResult<ApplicationUser>(user)); _userManagerMock.Setup(x => x.ResetPasswordAsync(user.Id, code, It.IsAny<string>())).Returns(Task.FromResult<IdentityResult>(IdentityResult.Success)); RedirectToRouteResult result = _subject.ResetPassword(viewModel).Result as RedirectToRouteResult; Assert.AreEqual("ResetPasswordConfirmation", result.RouteValues["action"]); }