コード例 #1
0
        public async Task <IActionResult> ForgotPassword([FromBody] RequestPasswordResetDto requestPasswordResetDto)
        {
            var userIp = Request.HttpContext.Connection.RemoteIpAddress;

            if (_cacheService.IsNumberOfAttempsExceededRecovery(userIp))
            {
                if (requestPasswordResetDto.RecaptchaResponse == null ||
                    !await _reCaptchaValidation.ValidateRecaptcha(requestPasswordResetDto.RecaptchaResponse))
                {
                    _cacheService.UpdateAttempsCountRecovery(userIp);
                    _logger.LogInformation($"Invalid captcha validation: {userIp}");
                    return(BadRequest(_reCaptchaValidation.CreateCaptchaResponseRecovery(false, true)));
                }
            }
            var result     = _cacheService.HandleAttempsRecovery(userIp);
            var resetToken = await _changePasswordService.SendResetLink(requestPasswordResetDto.Email);

            _logger.LogInformation(resetToken == null
                ? $"User with email: {requestPasswordResetDto.Email} fails to generate token"
                : $"User with email: {requestPasswordResetDto.Email} send reset password request with token: {resetToken}"
                                   );
            return(Ok(_reCaptchaValidation.CreateCaptchaResponseRecovery(true, result)));
        }