public async Task <IActionResult> VerifyEmail([FromBody] VerifyEmailRequestDto request)
        {
            if (!ModelState.IsValid)
            {
                return(ValidationProblem(ModelState));
            }

            // Retrieve user
            var user = await _userManager.FindByIdAsync(request.UserId);

            if (user == null)
            {
                return(BadRequest(new ErrorDto(ErrorDto.UserNotFound, "User not found")));
            }

            var result = await _userManager.ConfirmEmailAsync(user, request.Token);

            if (result.Succeeded)
            {
                return(Ok());
            }
            else
            {
                var errorDto = new ErrorDto();
                errorDto.AddIdentityErrors(result.Errors);
                return(BadRequest(errorDto));
            }
        }
        public async Task <IActionResult> RegisterWithoutEmailVerification([FromBody] RegisterRequestDto request)
        {
            if (!ModelState.IsValid)
            {
                return(ValidationProblem(ModelState));
            }

            // Map dto to entity
            var user = _mapper.Map <ApplicationUser>(request);

            // Create new user. This should incorporate a process to verify that the user owns the email address.
            var result = await _userManager.CreateAsync(user, request.Password);

            if (result.Succeeded)
            {
                var userDto = _mapper.Map <UserDto>(user);
                userDto.Roles = (await _userManager.GetRolesAsync(user)).ToArray();

                return(Created($"/{ApiRoot}account", userDto));
            }
            else
            {
                var errorDto = new ErrorDto();
                errorDto.AddIdentityErrors(result.Errors);
                return(BadRequest(errorDto));
            }
        }
        public async Task <IActionResult> Register([FromBody] RegisterRequestDto request)
        {
            if (!ModelState.IsValid)
            {
                return(ValidationProblem(ModelState));
            }

            // Map dto to entity
            var user = _mapper.Map <ApplicationUser>(request);

            // Create new user
            var result = await _userManager.CreateAsync(user, request.Password);

            if (result.Succeeded)
            {
                // Send email with verification link
                var token = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                var callbackUrl = Url.GetEmailVerificationLink(_applicationSettings.FrontEndUri, user.Id, token);
                await _emailSender.SendEmailConfirmationAsync(request.Email, callbackUrl);

                // Return details of created user
                var userDto = _mapper.Map <UserDto>(user);
                userDto.Roles = (await _userManager.GetRolesAsync(user)).ToArray();

                return(Created($"/{ApiRoot}account", new SuccessDto <UserDto>
                {
                    Message = "Please verify your email address by clicking the link in the email you have been sent.",
                    Data = userDto
                }));
            }
            else
            {
                var errorDto = new ErrorDto();
                errorDto.AddIdentityErrors(result.Errors);
                return(BadRequest(errorDto));
            }
        }