public async Task <IActionResult> Register(RegisterParameters parameters) { try { if (!ModelState.IsValid) { return(BadRequest(ModelState.Values.SelectMany(state => state.Errors) .Select(error => error.ErrorMessage) .FirstOrDefault())); } // https://gooroo.io/GoorooTHINK/Article/17333/Custom-user-roles-and-rolebased-authorization-in-ASPNET-core/32835 string[] roleNames = { "SuperAdmin", "Admin", "User" }; IdentityResult roleResult; foreach (var roleName in roleNames) { //creating the roles and seeding them to the database var roleExist = await _roleManager.RoleExistsAsync(roleName); if (!roleExist) { roleResult = await _roleManager.CreateAsync(new IdentityRole <Guid>(roleName)); } } var user = new ApplicationUser { UserName = parameters.UserName, Email = parameters.Email }; user.UserName = parameters.UserName; var result = await _userManager.CreateAsync(user, parameters.Password); if (!result.Succeeded) { return(BadRequest(result.Errors.FirstOrDefault()?.Description)); } //Role - Here we tie the new user to the "Admin" role await _userManager.AddToRoleAsync(user, "Admin"); if (Convert.ToBoolean(_configuration["RequireConfirmedEmail"])) { #region New User Confirmation Email try { // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=532713 var token = await _userManager.GenerateEmailConfirmationTokenAsync(user); string callbackUrl = string.Format("{0}/Account/ConfirmEmail/{1}?token={2}", _configuration["ApplicationUrl"], user.Id, token); var email = new EmailMessage(); email.ToAddresses.Add(new EmailAddress(user.Email, user.Email)); email.FromAddresses.Add(new EmailAddress("*****@*****.**", "*****@*****.**")); email = EmailTemplates.BuildNewUserConfirmationEmail(email, user.UserName, user.Email, callbackUrl, user.Id.ToString(), token); //Replace First UserName with Name if you want to add name to Registration Form _logger.LogInformation("New user registered: {0}", user); await _emailService.SendEmailAsync(email); } catch (Exception ex) { _logger.LogInformation("New user email failed: {0}", ex.Message); } #endregion return(Ok(new { success = "true" })); } #region New User Email try { var email = new EmailMessage(); email.ToAddresses.Add(new EmailAddress(user.Email, user.Email)); email.FromAddresses.Add(new EmailAddress("*****@*****.**", "*****@*****.**")); email = EmailTemplates.BuildNewUserEmail(email, user.UserName, user.Email, parameters.Password); //Replace First UserName with Name if you want to add name to Registration Form _logger.LogInformation("New user registered: {0}", user); await _emailService.SendEmailAsync(email); } catch (Exception ex) { _logger.LogInformation("New user email failed: {0}", ex.Message); } #endregion return(await Login(new LoginParameters { UserName = parameters.UserName, Password = parameters.Password })); } catch (Exception ex) { _logger.LogError("Register User Failed: {0}", ex.Message); return(BadRequest(ex)); } }
public async Task <ApiResponse> Create(RegisterDto parameters) { try { if (!ModelState.IsValid) { return(new ApiResponse(400, "User Model is Invalid")); } var user = new ApplicationUser { UserName = parameters.UserName, Email = parameters.Email }; user.UserName = parameters.UserName; var result = await _userManager.CreateAsync(user, parameters.Password); if (!result.Succeeded) { return(new ApiResponse(400, "Register User Failed: " + result.Errors.FirstOrDefault()?.Description)); } else { var claimsResult = _userManager.AddClaimsAsync(user, new Claim[] { new Claim(JwtClaimTypes.Name, parameters.UserName), new Claim(JwtClaimTypes.Email, parameters.Email), new Claim(JwtClaimTypes.EmailVerified, "false", ClaimValueTypes.Boolean) }).Result; } //Role - Here we tie the new user to the "User" role await _userManager.AddToRoleAsync(user, "User"); if (Convert.ToBoolean(_configuration["BlazorBoilerplate:RequireConfirmedEmail"] ?? "false")) { #region New User Confirmation Email try { // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=532713 var token = await _userManager.GenerateEmailConfirmationTokenAsync(user); string callbackUrl = string.Format("{0}/Account/ConfirmEmail/{1}?token={2}", _configuration["BlazorBoilerplate:ApplicationUrl"], user.Id, token); var email = new EmailMessageDto(); email.ToAddresses.Add(new EmailAddressDto(user.Email, user.Email)); email = EmailTemplates.BuildNewUserConfirmationEmail(email, user.UserName, user.Email, callbackUrl, user.Id.ToString(), token); //Replace First UserName with Name if you want to add name to Registration Form _logger.LogInformation("New user created: {0}", user); await _emailService.SendEmailAsync(email); } catch (Exception ex) { _logger.LogInformation("New user email failed: {0}", ex.Message); } #endregion return(new ApiResponse(200, "Create User Success")); } #region New User Email try { var email = new EmailMessageDto(); email.ToAddresses.Add(new EmailAddressDto(user.Email, user.Email)); email = EmailTemplates.BuildNewUserEmail(email, user.UserName, user.Email, parameters.Password); //Replace First UserName with Name if you want to add name to Registration Form _logger.LogInformation("New user created: {0}", user); await _emailService.SendEmailAsync(email); } catch (Exception ex) { _logger.LogInformation("New user email failed: {0}", ex.Message); } #endregion UserInfoDto userInfo = new UserInfoDto { IsAuthenticated = false, UserName = user.UserName, Email = user.Email, FirstName = user.FirstName, LastName = user.LastName, //ExposedClaims = user.Claims.ToDictionary(c => c.Type, c => c.Value), Roles = new List <string> { "User" } }; return(new ApiResponse(200, "Created New User", userInfo)); } catch (Exception ex) { _logger.LogError("Create User Failed: {0}", ex.Message); return(new ApiResponse(400, "Create User Failed")); } }
public async Task <ApiResponse> Register(RegisterDto parameters) { try { if (!ModelState.IsValid) { return(new ApiResponse(400, "User Model is Invalid")); } var user = new ApplicationUser { UserName = parameters.UserName, Email = parameters.Email }; user.UserName = parameters.UserName; var result = await _userManager.CreateAsync(user, parameters.Password); if (!result.Succeeded) { return(new ApiResponse(400, "Register User Failed: " + result.Errors.FirstOrDefault()?.Description)); } //Role - Here we tie the new user to the "Admin" role await _userManager.AddToRoleAsync(user, "Admin"); if (Convert.ToBoolean(_configuration["BlazorBoilerplate:RequireConfirmedEmail"] ?? "false")) { #region New User Confirmation Email try { // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=532713 var token = await _userManager.GenerateEmailConfirmationTokenAsync(user); string callbackUrl = string.Format("{0}/Account/ConfirmEmail/{1}?token={2}", _configuration["BlazorBoilerplate:ApplicationUrl"], user.Id, token); var email = new EmailMessageDto(); email.ToAddresses.Add(new EmailAddressDto(user.Email, user.Email)); email = EmailTemplates.BuildNewUserConfirmationEmail(email, user.UserName, user.Email, callbackUrl, user.Id.ToString(), token); //Replace First UserName with Name if you want to add name to Registration Form _logger.LogInformation("New user registered: {0}", user); await _emailService.SendEmailAsync(email); } catch (Exception ex) { _logger.LogInformation("New user email failed: {0}", ex.Message); } #endregion return(new ApiResponse(200, "Register User Success")); } #region New User Email try { var email = new EmailMessageDto(); email.ToAddresses.Add(new EmailAddressDto(user.Email, user.Email)); email = EmailTemplates.BuildNewUserEmail(email, user.UserName, user.Email, parameters.Password); //Replace First UserName with Name if you want to add name to Registration Form _logger.LogInformation("New user registered: {0}", user); await _emailService.SendEmailAsync(email); } catch (Exception ex) { _logger.LogInformation("New user email failed: {0}", ex.Message); } #endregion return(await Login(new LoginDto { UserName = parameters.UserName, Password = parameters.Password })); } catch (Exception ex) { _logger.LogError("Register User Failed: {0}", ex.Message); return(new ApiResponse(400, "Register User Failed")); } }