public async Task ValidateAsync(string captchaResponse) { var httpContext = _httpContextAccessor.HttpContext; if (httpContext == null) { throw new Exception("RecaptchaValidator should be used in a valid HTTP context!"); } if (captchaResponse.IsNullOrEmpty()) { throw new UserFriendlyException(L("CaptchaCanNotBeEmpty")); } var response = await _reCAPTCHASiteVerifyV3.Verify(new reCAPTCHASiteVerifyRequest { Response = captchaResponse, RemoteIp = _httpContextAccessor.HttpContext.Connection?.RemoteIpAddress?.ToString() }); if (!response.Success || response.Score < 0.5) { Logger.Warn(response.ToJsonString()); throw new UserFriendlyException(L("IncorrectCaptchaAnswer")); } }
public async Task <IActionResult> OnPostAsync(string returnUrl = null) { returnUrl = returnUrl ?? Url.Content("~/"); /* Captcha */ var response = await _siteVerify.Verify(new reCAPTCHASiteVerifyRequest { Response = Input.token, RemoteIp = HttpContext.Connection.RemoteIpAddress.ToString() }); if (response.Score < 0.5 || response.Success == false) // gdy niski poziom zaufania lub gdy wogóle się nie powiodło { _logger.LogInformation("\n " + "\n " + "token " + response.Success + " score: " + response.Score + "\n " + "\n "); ModelState.AddModelError("token", "Nie powiodła się weryfikacja"); return(Page()); } _logger.LogInformation("Success: " + response.Success + "\t Score: " + response.Score); /* Captcha */ if (ModelState.IsValid) { // This doesn't count login failures towards account lockout // To enable password failures to trigger account lockout, set lockoutOnFailure: true var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure : false); if (result.Succeeded) { _logger.LogInformation("Zalogowano."); return(LocalRedirect(returnUrl)); } /* * if (result.RequiresTwoFactor) * { * return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe }); * } */ if (result.IsLockedOut) { _logger.LogWarning("Użytkownik zablokowany."); ModelState.AddModelError(string.Empty, "Użytkownik zbanowany"); return(Page()); } if (result.IsNotAllowed) { ModelState.AddModelError(string.Empty, "Konto nie potwierdzone"); return(Page()); } else { ModelState.AddModelError(string.Empty, "Nie udało się zalogować :("); return(Page()); } } // If we got this far, something failed, redisplay form return(Page()); }
public async Task OnPostAsync(string token) { var response = await _siteVerify.Verify(new reCAPTCHASiteVerifyRequest { Response = token, RemoteIp = HttpContext.Connection.RemoteIpAddress.ToString() }); Result = JsonConvert.SerializeObject(response, Formatting.Indented); }
public async Task OnPostAsync(string token) { var response = await _siteVerify.Verify(new reCAPTCHASiteVerifyRequest { Response = token, RemoteIp = HttpContext.Connection.RemoteIpAddress?.ToString() }); Result = JsonSerializer.Serialize(response, new JsonSerializerOptions { WriteIndented = true }); }
public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { if (!_options.Enabled) { await next(); return; } if (context.HttpContext.Request.Headers.ContainsKey(_options.HeaderKey)) { string googleRecaptchaToken = context.HttpContext.Request.Headers[_options.HeaderKey].ToString(); if (googleRecaptchaToken.IsNullOrEmpty()) { throw new LinCmsException("验证参数不存在,人机验证失败!"); } try { reCAPTCHASiteVerifyV3Response response = await _siteVerify.Verify(new reCAPTCHASiteVerifyRequest { Response = googleRecaptchaToken, RemoteIp = context.HttpContext.Connection.RemoteIpAddress.ToString() }); if (!response.Success || response.Score != 0 && response.Score < _options.MinimumScore) { throw new LinCmsException("人机验证失败!"); } } catch (NetworkInformationException ex) { _logger.LogError($"Google人机验证网络请求失败:{ex.Message}{ex.StackTrace}"); } await next(); return; } throw new LinCmsException("人机验证失败,请检查参数!"); }
public async Task <IActionResult> OnPostAsync(string returnUrl = null) { returnUrl = returnUrl ?? Url.Content("~/"); ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); /* Captcha */ var response = await _siteVerify.Verify(new reCAPTCHASiteVerifyRequest { Response = Input.token, RemoteIp = HttpContext.Connection.RemoteIpAddress.ToString() }); if (response.Score < 0.5 || response.Success == false) // gdy niski poziom zaufania lub gdy wogóle się nie powiodło { _logger.LogInformation("\n " + "\n " + "token " + response.Success + " score: " + response.Score + "\n " + "\n "); ModelState.AddModelError("token", "Nie powiodła się weryfikacja"); return(Page()); } _logger.LogInformation("Success: " + response.Success + "\t Score: " + response.Score); /* Captcha */ if (ModelState.IsValid) { var user = new IdentityUser { UserName = Input.Email, Email = Input.Email }; var result = await _userManager.CreateAsync(user, Input.Password); if (result.Succeeded) { _logger.LogInformation("Użytkownik stworzony."); var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code)); var callbackUrl = Url.Page( "/Account/ConfirmEmail", pageHandler: null, values: new { area = "Identity", userId = user.Id, code = code, returnUrl = returnUrl }, protocol: Request.Scheme); SendMail email = new SendMail(); string msg = $"<a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>Kliknij na link, aby aktywować konto!</a>."; email.SendEmail(Input.Email, "Rejestracja - Ridentia", msg); TempData["CheckEmail"] = "Aby aktywować konto musisz wejść na email i wejść w link aktywacyjny! "; if (_userManager.Options.SignIn.RequireConfirmedAccount) { return(RedirectToPage("RegisterConfirmation", new { email = Input.Email, returnUrl = returnUrl })); } else { await _signInManager.SignInAsync(user, isPersistent : false); return(LocalRedirect(returnUrl)); } } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } // If we got this far, something failed, redisplay form return(Page()); }