Пример #1
0
        public async Task Create(UserRegisterRequestDTO userDto)
        {
            // Generate verification code
            string code = Guid.NewGuid().ToString("n").Substring(0, 8);

            while (_context.UnverifiedUser.Any(x => x.VerificationCode == code))
            {
                code = Guid.NewGuid().ToString("n").Substring(0, 8);
            }

            User user = new User
            {
                UserName       = userDto.Username,
                Email          = userDto.Email,
                FirstName      = userDto.FirstName,
                LastName       = userDto.LastName,
                PhoneNumber    = userDto.PhoneNumber,
                NumberOfBooks  = 0,
                Points         = 0,
                EmailConfirmed = false,
                Role           = "Member"
            };

            var resultCreate = await _userManager.CreateAsync(user, userDto.Password);

            var resultRole = await _userManager.AddToRoleAsync(user, user.Role);

            // Unverified user
            if (resultCreate.Succeeded && resultRole.Succeeded)
            {
                UnverifiedUser unverifiedUser = new UnverifiedUser
                {
                    UserId           = user.Id,
                    VerificationCode = code
                };

                await _context.UnverifiedUser.AddAsync(unverifiedUser);

                await _context.SaveChangesAsync();

                _logger.LogInformation("User created a new account with password.");
                await _signInManager.SignInAsync(user, isPersistent : false);

                // Send email
                SendVerificationEmail(user, code);
            }
            else
            {
                throw new EntityInvalidationException(string.Join(", ", resultCreate.Errors.Select(x => "Code " + x.Code + " Description" + x.Description)));
            }
        }
Пример #2
0
        public async Task VerifyAccount(string verificationCode)
        {
            UnverifiedUser unverifiedUser =
                await _context.UnverifiedUser.SingleOrDefaultAsync(u => u.VerificationCode == verificationCode);

            if (unverifiedUser == null)
            {
                throw new EntityInvalidationException("The code entered is not correct");
            }

            User user = await _context.User.SingleOrDefaultAsync(u => u.Id == unverifiedUser.UserId);

            user.EmailConfirmed = true;

            // Remove unverified user
            _context.UnverifiedUser.Remove(unverifiedUser);
            await _context.SaveChangesAsync();
        }