Esempio n. 1
0
        /// <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);
        }