public async Task <IActionResult> RegisterUser(RegisterUserViewModel model) { if (ModelState.IsValid) { // create user + claims var userToCreate = new Entities.User { Password = model.Password, Username = model.Username, IsActive = true }; userToCreate.Claims.Add(new Entities.UserClaim("country", model.Country)); userToCreate.Claims.Add(new Entities.UserClaim("address", model.Address)); userToCreate.Claims.Add(new Entities.UserClaim("given_name", model.Firstname)); userToCreate.Claims.Add(new Entities.UserClaim("family_name", model.Lastname)); userToCreate.Claims.Add(new Entities.UserClaim("email", model.Email)); userToCreate.Claims.Add(new Entities.UserClaim("subscriptionlevel", "PaidUser")); userToCreate.Claims.Add(new Entities.UserClaim(ClaimTypes.Role, "PaidUser")); // if we're provisioning a user via external login, we must add the provider & // user id at the provider to this user's logins if (model.IsProvisioningFromExternal) { userToCreate.Logins.Add(new Entities.UserLogin() { LoginProvider = model.Provider, ProviderKey = model.ProviderUserId }); } // add it through the repository _marvinUserRepository.AddUser(userToCreate); if (!_marvinUserRepository.Save()) { throw new Exception($"Creating a user failed."); } if (!model.IsProvisioningFromExternal) { AuthenticationProperties props = null; await HttpContext.SignInAsync(userToCreate.SubjectId, userToCreate.Username, props); } // continue with the flow if (_identityInteractionService.IsValidReturnUrl(model.ReturnUrl) || Url.IsLocalUrl(model.ReturnUrl)) { return(Redirect(model.ReturnUrl)); } return(Redirect("~/")); } // ModelState invalid, return the view with the passed-in model // so changes can be made return(View(model)); }
public async Task <IActionResult> RegisterUser(RegisterUserViewModel model) { if (ModelState.IsValid) { // create user + claims var userToCreate = new Entities.User(); userToCreate.Password = model.Password; userToCreate.Username = model.Username; userToCreate.IsActive = true; userToCreate.Claims.Add(new Entities.UserClaim("country", model.Country)); userToCreate.Claims.Add(new Entities.UserClaim("address", model.Address)); userToCreate.Claims.Add(new Entities.UserClaim("given_name", model.Firstname)); userToCreate.Claims.Add(new Entities.UserClaim("family_name", model.Lastname)); userToCreate.Claims.Add(new Entities.UserClaim("email", model.Email)); userToCreate.Claims.Add(new Entities.UserClaim("subscriptionlevel", "FreeUser")); // add it through the repository _marvinUserRepository.AddUser(userToCreate); if (!_marvinUserRepository.Save()) { throw new Exception($"Creating a user failed."); } // log the user in //https://github.com/aspnet/Announcements/issues/232 //await HttpContext.Authentication.SignInAsync(userToCreate.SubjectId, userToCreate.Username); await HttpContext.SignInAsync(userToCreate.SubjectId, userToCreate.Username); // continue with the flow if (_interaction.IsValidReturnUrl(model.ReturnUrl) || Url.IsLocalUrl(model.ReturnUrl)) { return(Redirect(model.ReturnUrl)); } return(Redirect("~/")); } // ModelState invalid, return the view with the passed-in model // so changes can be made return(View(model)); }