/// <summary> /// Registers the specified user. /// </summary> /// <param name="model">The registration model.</param> /// <param name="requireConfirmation">if set to <c>true</c> [require confirmation].</param> /// <returns> /// true when user is registered and logged in /// </returns> public static async Task <RegistrationResult> RegisterAsync(RegisterModel model, bool requireConfirmation) { var retVal = new RegistrationResult(); try { var id = Guid.NewGuid().ToString(); retVal.ConfirmationToken = await UserSecurity.CreateUserAndAccountAsync(model.Email, model.Password, new { MemberId = id, CustomerSession.StoreId, RegisterType = RegisterType.GuestUser.GetHashCode(), AccountState = requireConfirmation ? AccountState.PendingApproval.GetHashCode() : AccountState.Approved.GetHashCode(), Discriminator = "Account" }, requireConfirmation); var contact = new Contact { MemberId = id, FullName = String.Format("{0} {1}", model.FirstName, model.LastName) }; contact.Emails.Add(new Email { Address = model.Email, MemberId = id, Type = EmailType.Primary.ToString() }); foreach (var addr in model.Addresses) { contact.Addresses.Add(addr); } UserClient.CreateContact(contact); retVal.IsSuccess = requireConfirmation || await UserSecurity.LoginAsync(model.Email, model.Password) == SignInStatus.Success; return(retVal); } catch (MembershipCreateUserException e) { retVal.ErrorMessage = ErrorCodeToString(e.StatusCode); } catch (Exception ex) { retVal.ErrorMessage = ex.Message; } return(retVal); }