示例#1
0
        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());
        }
示例#2
0
        // 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());
        }
示例#3
0
        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);
                }
            }
        }