public async Task <ActionResult> RegisterUser([FromBody] UserRegisterDto userRegister) { if (!ModelState.IsValid) { return(BadRequest(ModelState.Values.SelectMany(c => c.Errors))); } var user = new IeemdbUser { Email = userRegister.Email, UserName = userRegister.UserName, }; var result = await userManager.CreateAsync(user, userRegister.Password); if (!result.Succeeded) { return(Conflict(result.Errors)); } var token = await userManager.GenerateEmailConfirmationTokenAsync(user); var url = $"{Request.Scheme}://{Request.Host}{Request.PathBase}/api/account/confirm?email=" + HttpUtility.UrlEncode($"{userRegister.Email}") + "&token=" + HttpUtility.UrlEncode($"{token}"); var body = await renderer.RenderViewToStringAsync( "/Views/Emails/ConfirmAccountEmail.cshtml", new ConfirmAccountViewModel { ConfirmUrl = url, }); await emailSender.SendEmailAsync(user.Email, "Email Confirmation", body); await userManager.AddToRoleAsync(user, RoleNames.Member); return(!result.Succeeded ? Conflict(result.Errors) : Ok()); }
// This method generates claims, claims are basically the information that will be appended to the Jwt. private async Task <List <Claim> > GenerateClaims(IeemdbUser user) { var identityClaims = await userManager.GetClaimsAsync(user); var identityRoles = (await userManager.GetRolesAsync(user)).Select(x => new Claim(ClaimTypes.Role, x)); var claims = new List <Claim> { new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()), new Claim(ClaimTypes.Name, user.UserName), new Claim(JwtRegisteredClaimNames.Sub, user.Email), new Claim( JwtRegisteredClaimNames.Iat, DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(), ClaimValueTypes.Integer64), }; claims.AddRange(identityClaims); claims.AddRange(identityRoles); return(claims.ToList()); }
private static async Task SeedUsers( ILogger logger, UserManager <IeemdbUser> userManager, string adminInitialPassword, string adminInitialEmail) { var admins = await userManager.GetUsersInRoleAsync(RoleNames.Administrator); var user = new IeemdbUser { EmailConfirmed = true, Email = adminInitialEmail, UserName = "******", LockoutEnabled = false, }; if (!admins.Any()) { logger.LogInformation(LogTemplates.SeedAdmin, adminInitialEmail); var admin = await userManager.FindByEmailAsync(adminInitialEmail); var result = admin != null ? null : await userManager.CreateAsync( user, adminInitialPassword); if (admin != null || (result?.Succeeded ?? false)) { admin ??= user; logger.LogInformation(LogTemplates.SeedAdmin, adminInitialEmail); if (!await userManager.IsInRoleAsync(admin, RoleNames.Administrator)) { result = await userManager.AddToRoleAsync(admin, RoleNames.Administrator); } } else { logger.LogError(LogTemplates.SeedAdminFailed, result?.Errors); } } }