private IHttpActionResult GetErrorResult(RegisterResultViewModel result)
        {
            if (result == null)
            {
                return(InternalServerError());
            }

            if (!result.Succeeded)
            {
                if (result.Errors != null)
                {
                    foreach (string error in result.Errors)
                    {
                        ModelState.AddModelError("", error);
                    }
                }

                if (ModelState.IsValid)
                {
                    // No ModelState errors are available to send, so just return an empty BadRequest.
                    return(BadRequest());
                }

                return(BadRequest(ModelState));
            }

            return(null);
        }
Beispiel #2
0
        public async Task <RegisterResultViewModel> CreateAsync(string userName, string password, string fullName)
        {
            var result       = new RegisterResultViewModel();
            var serialNumber = SerialNumberGenerator.Generate();
            var user         = _context.Users.Add(new User
            {
                CreateDate   = DateTime.Now,
                Email        = userName,
                FullName     = fullName,
                IsActive     = true,
                IsAdmin      = false,
                Password     = PasswordHasher.Hash(password),
                UserName     = userName,
                SerialNumber = serialNumber
            });

            if (await _context.SaveChangesAsync() > 0)
            {
                result.IsSuccess    = true;
                result.SerialNumber = serialNumber;
                result.UserId       = user.Entity.Id;
            }
            else
            {
                result.IsSuccess = false;
            }
            return(result);
        }
        /// <summary>
        ///     注册- 注册成功,重新发送邮件页面
        /// </summary>
        /// <param name="u"></param>
        /// <param name="e"></param>
        /// <returns></returns>
        public async Task <ActionResult> RegisterByLink(string u, string e)
        {
            await Task.Yield();

            var viewModel = new RegisterResultViewModel {
                UserName = u, EmailAddress = e
            };

            return(View(viewModel));
        }
Beispiel #4
0
        public async Task <IActionResult> Create(RegisterViewModel registerModel)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    var birthdate = DateTime.Parse(registerModel.Birthdate);

                    if (birthdate.Age() < 18)
                    {
                        throw new Exception("You have to be at least 18 years old to register");
                    }

                    RegisterResultViewModel registerResult = await _userLogic.Create(registerModel);

                    if (registerResult != null)
                    {
                        if (registerResult.Result.Succeeded)
                        {
                            if ((await _singInManager.PasswordSignInAsync(registerResult.User,
                                                                          registerModel.Password, false, false)).Succeeded)
                            {
                                return(Redirect(registerModel?.ReturnUrl ?? "/"));
                            }
                        }
                        else
                        {
                            AddErrorsFromResult(registerResult.Result);
                        }
                    }
                }
                catch (ConnectionException ex)
                {
                    _logger.Log(LogLevel.Error,
                                $"The following connection error occurred: {ex.Message} @ {GetType().Name}");
                    ModelState.AddModelError("", ex.Message);
                }
                catch (Exception ex)
                {
                    _logger.Log(LogLevel.Error, $"A general exception occurred: {ex.Message} @ {GetType().Name}");
                    ModelState.AddModelError("", ex.Message);
                }
            }
            ViewBag.Countries = new SelectList(_citiesLogic.ListCountries());

            return(View(registerModel));
        }
        public async Task <IHttpActionResult> Register(RegisterUserViewModel userModel)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            RegisterResultViewModel result = await worker.RegisterUser(userModel);

            IHttpActionResult errorResult = GetErrorResult(result);

            if (errorResult != null)
            {
                return(errorResult);
            }

            return(Ok());
        }
 /// <summary>
 /// 测试用的模拟地址
 /// </summary>
 /// <returns></returns>
 public IActionResult RegisterResultabc()
 {
     if (!DebugHelper.IsDebug)
     {
         return(RedirectToAppHome());
     }
     else
     {
         RegisterResultViewModel model = new RegisterResultViewModel
         {
             EmailAddress   = "*****@*****.**",
             NameAndSurname = "NameAndSurname",
             TenancyName    = "NameAndSurname",
             UserName       = "******"
         };
         return(View("~/Views/Account/RegisterResult.cshtml", model));
     }
 }
Beispiel #7
0
        public virtual async Task <ActionResult> Register(RegisterViewModel model)
        {
            ActionResult actionResult;

            AbpUserManager <Tenant, Role, FuelWerx.Authorization.Users.User> .AbpLoginResult loginResultAsync;
            Guid guid;
            Guid guid1;
            bool flag;

            AbpUserManager <Tenant, Role, FuelWerx.Authorization.Users.User> .AbpLoginResult abpLoginResult;
            TenantLogosEditDto tenantLogosEditDto = Abp.Threading.AsyncHelper.RunSync <TenantLogosEditDto>(() => this.GetCurrentTenantLogos());
            dynamic            viewBag            = this.ViewBag;

            guid = (tenantLogosEditDto.HeaderImageId.HasValue ? tenantLogosEditDto.HeaderImageId.Value : Guid.Empty);
            viewBag.TenantCompanyHeaderImageId = guid;
            dynamic obj = this.ViewBag;

            guid1 = (tenantLogosEditDto.HeaderMobileImageId.HasValue ? tenantLogosEditDto.HeaderMobileImageId.Value : Guid.Empty);
            obj.TenantCompanyHeaderMobileImageId = guid1;
            try
            {
                this.CheckSelfRegistrationIsEnabled();
                this.CheckModelState();
                if (!model.IsExternalLogin && this.UseCaptchaOnRegistration())
                {
                    RecaptchaVerificationHelper recaptchaVerificationHelper = this.GetRecaptchaVerificationHelper();
                    if (recaptchaVerificationHelper.Response.IsNullOrEmpty())
                    {
                        throw new UserFriendlyException(this.L("CaptchaCanNotBeEmpty"));
                    }
                    if (recaptchaVerificationHelper.VerifyRecaptchaResponse() != RecaptchaVerificationResult.Success)
                    {
                        throw new UserFriendlyException(this.L("IncorrectCaptchaAnswer"));
                    }
                }
                if (!this._multiTenancyConfig.IsEnabled)
                {
                    model.TenancyName = "Default";
                }
                else if (model.TenancyName.IsNullOrEmpty())
                {
                    throw new UserFriendlyException(this.L("TenantNameCanNotBeEmpty"));
                }
                Tenant activeTenantAsync = await this.GetActiveTenantAsync(model.TenancyName);

                bool settingValueForTenantAsync = await SettingManagerExtensions.GetSettingValueForTenantAsync <bool>(this.SettingManager, "App.UserManagement.AllowSelfRegistration", activeTenantAsync.Id);

                if (!settingValueForTenantAsync)
                {
                    throw new UserFriendlyException(this.L("SelfUserRegistrationIsDisabledMessage_Detail"));
                }
                settingValueForTenantAsync = await SettingManagerExtensions.GetSettingValueForTenantAsync <bool>(this.SettingManager, "App.UserManagement.IsNewRegisteredUserActiveByDefault", activeTenantAsync.Id);

                bool flag1 = settingValueForTenantAsync;
                settingValueForTenantAsync = await SettingManagerExtensions.GetSettingValueForTenantAsync <bool>(this.SettingManager, "Abp.Zero.UserManagement.IsEmailConfirmationRequiredForLogin", activeTenantAsync.Id);

                bool flag2 = settingValueForTenantAsync;
                FuelWerx.Authorization.Users.User user = new FuelWerx.Authorization.Users.User()
                {
                    TenantId     = new int?(activeTenantAsync.Id),
                    Name         = model.Name,
                    Surname      = model.Surname,
                    EmailAddress = model.EmailAddress,
                    IsActive     = flag1
                };
                FuelWerx.Authorization.Users.User userName = user;
                ExternalLoginInfo externalLoginInfoAsync   = null;
                if (model.IsExternalLogin)
                {
                    externalLoginInfoAsync = await AuthenticationManagerExtensions.GetExternalLoginInfoAsync(this.AuthenticationManager);

                    if (externalLoginInfoAsync == null)
                    {
                        throw new ApplicationException("Can not external login!");
                    }
                    FuelWerx.Authorization.Users.User user1 = userName;
                    List <UserLogin> userLogins             = new List <UserLogin>();
                    UserLogin        userLogin = new UserLogin()
                    {
                        LoginProvider = externalLoginInfoAsync.Login.LoginProvider,
                        ProviderKey   = externalLoginInfoAsync.Login.ProviderKey
                    };
                    userLogins.Add(userLogin);
                    user1.Logins   = userLogins;
                    model.UserName = model.EmailAddress;
                    model.Password = FuelWerx.Authorization.Users.User.CreateRandomPassword();
                    if (string.Equals(externalLoginInfoAsync.Email, model.EmailAddress, StringComparison.InvariantCultureIgnoreCase))
                    {
                        userName.IsEmailConfirmed = true;
                    }
                }
                else if (model.UserName.IsNullOrEmpty() || model.Password.IsNullOrEmpty())
                {
                    throw new UserFriendlyException(this.L("FormIsNotValidMessage"));
                }
                userName.UserName = model.UserName;
                userName.Password = (new PasswordHasher()).HashPassword(model.Password);
                IActiveUnitOfWork current = this._unitOfWorkManager.Current;
                current.EnableFilter(new string[] { "MayHaveTenant" });
                this._unitOfWorkManager.Current.SetFilterParameter("MayHaveTenant", "tenantId", activeTenantAsync.Id);
                userName.Roles = new List <UserRole>();
                IQueryable <Role> roles     = this._roleManager.Roles;
                List <Role>       listAsync = await(
                    from r in roles
                    where r.IsDefault
                    select r).ToListAsync <Role>();
                foreach (Role role in listAsync)
                {
                    ICollection <UserRole> userRoles = userName.Roles;
                    userRoles.Add(new UserRole()
                    {
                        RoleId = role.Id
                    });
                }
                this.CheckErrors(await this._userManager.CreateAsync(userName));
                await this._unitOfWorkManager.Current.SaveChangesAsync();

                if (!userName.IsEmailConfirmed)
                {
                    userName.SetNewEmailConfirmationCode();
                    await this._userEmailer.SendEmailActivationLinkAsync(userName, null);
                }
                if (userName.IsActive && (userName.IsEmailConfirmed || !flag2))
                {
                    if (externalLoginInfoAsync == null)
                    {
                        loginResultAsync = await this.GetLoginResultAsync(userName.UserName, model.Password, activeTenantAsync.TenancyName);

                        abpLoginResult = loginResultAsync;
                    }
                    else
                    {
                        loginResultAsync = await this._userManager.LoginAsync(externalLoginInfoAsync.Login, activeTenantAsync.TenancyName);

                        abpLoginResult = loginResultAsync;
                    }
                    if (abpLoginResult.Result != AbpLoginResultType.Success)
                    {
                        this.Logger.Warn(string.Concat("New registered user could not be login. This should not be normally. login result: ", abpLoginResult.Result));
                        abpLoginResult = null;
                    }
                    else
                    {
                        await this.SignInAsync(abpLoginResult.User, abpLoginResult.Identity, false);

                        actionResult = this.Redirect(this.Url.Action("Index", "Application"));
                        return(actionResult);
                    }
                }
                AccountController       accountController       = this;
                RegisterResultViewModel registerResultViewModel = new RegisterResultViewModel()
                {
                    TenancyName    = activeTenantAsync.TenancyName,
                    NameAndSurname = string.Concat(userName.Name, " ", userName.Surname),
                    UserName       = userName.UserName,
                    EmailAddress   = userName.EmailAddress,
                    IsActive       = userName.IsActive,
                    IsEmailConfirmationRequired = flag2
                };
                actionResult = accountController.View("RegisterResult", registerResultViewModel);
            }
            catch (UserFriendlyException userFriendlyException1)
            {
                UserFriendlyException userFriendlyException = userFriendlyException1;
                ((dynamic)this.ViewBag).IsMultiTenancyEnabled = this._multiTenancyConfig.IsEnabled;
                dynamic viewBag1 = this.ViewBag;
                flag = (model.IsExternalLogin ? false : this.UseCaptchaOnRegistration());
                viewBag1.UseCaptcha = flag;
                ((dynamic)this.ViewBag).ErrorMessage = userFriendlyException.Message;
                actionResult = this.View("Register", model);
            }
            return(actionResult);
        }