public async Task <IActionResult> Register(RegisterViewModel model, string returnUrl) { if (_workContext.CurrentUser.IsRegistered()) { //Already registered user. await _authenticationService.SignOutAsync(); //Save a new record _workContext.CurrentUser = await _userService.InsertGuestUserAsync(); } var user = _workContext.CurrentUser; user.RegisteredInTenantId = _tenantContext.CurrentTenant.Id; if (ModelState.IsValid) { if (_userSettings.UsernamesEnabled && model.Username != null) { model.Username = model.Username.Trim(); } var registrationRequest = new UserRegistrationRequest( user, model.Email, _userSettings.UsernamesEnabled ? model.Username : model.Email, model.Password, _userSettings.DefaultPasswordFormat, _tenantContext.CurrentTenant.Id); var registrationResult = await _userRegistrationService.RegisterUserAsync(registrationRequest); if (registrationResult.Success) { //properties if (_dateTimeSettings.AllowUsersToSetTimeZone) { await _genericAttributeService.SaveAttributeAsync(user, UserDefaults.TimeZoneIdAttribute, model.TimeZoneId); } //form fields if (_userSettings.GenderEnabled) { await _genericAttributeService.SaveAttributeAsync(user, UserDefaults.GenderAttribute, model.Gender); } await _genericAttributeService.SaveAttributeAsync(user, UserDefaults.FirstNameAttribute, model.FirstName); await _genericAttributeService.SaveAttributeAsync(user, UserDefaults.LastNameAttribute, model.LastName); if (_userSettings.DateOfBirthEnabled) { var dateOfBirth = model.ParseDateOfBirth(); await _genericAttributeService.SaveAttributeAsync(user, UserDefaults.DateOfBirthAttribute, dateOfBirth); } if (_userSettings.PhoneEnabled) { await _genericAttributeService.SaveAttributeAsync(user, UserDefaults.PhoneAttribute, model.Phone); } //login await _authenticationService.SignInAsync(user, true); if (string.IsNullOrEmpty(returnUrl) || !Url.IsLocalUrl(returnUrl)) { return(RedirectToRoute("HomePage")); } return(Redirect(returnUrl)); } //errors foreach (var error in registrationResult.Errors) { ModelState.AddModelError("", error); } } //If we got this far, something failed, redisplay form model = await _userAccountModelFactory.PrepareRegisterModel(model, true); return(View(model)); }
public async Task <ApiResponse <RegistrationResponse> > Handle(EndUserRegistrationRequest request, CancellationToken cancellationToken) { return(await userRegistrationService.RegisterUserAsync(request)); }