reCAPTCHA
/blog/artikel/recaptcha
Para evitar que robôs trolling façam entradas em uma página da web, os chamados captchas existem há muito tempo para distinguir robôs de humanos. Para fazer isso, geralmente é necessário reconhecer letras ou números em um campo de texto - para o usuário isso é mais do que irritante.
reCAPTCHAs A ideia era usar o tempo e a energia que os usuários gastam nisso para coisas significativas. Enquanto isso, a empresa foi assumida pelo Google e o foco mudou um pouco: é amplamente reconhecido automaticamente se uma pessoa está realmente clicando na página da web ou não, e apenas em casos excepcionais as tarefas precisam ser resolvidas ao digitar, como reconhecer sinais de trânsito. Eu já tentei a instalação do serviço uma vez.
Deutsch English Français EspagnolO documentário é um pouco escasso, mas basicamente é simples. Eu inicialmente construí isso em uma página de teste interna e, assim que precisar, posso facilmente habilitá-lo. Para ajudar, há também um pacote NuGET pronto para ASP.NET Core que você pode usar. Na verdade trivial, mas ainda útil para ver como é feito:
A configuração é feita em uma seção separada, para que você não precise inserir a sitekey manualmente em todos os lugares. Para que as opções estejam disponíveis em uma página do Razor, você pode chamar a configuração em Inicialização:
services.Configure<RecaptchaSettings>(Configuration.GetSection("RecaptchaSettings"));
services.AddTransient<IRecaptchaService, RecaptchaService>();
E na página:
@inject IOptions<RecaptchaSettings> RecaptchaSettings
Então você pode inserir o captcha assim:
<div class="g-recaptcha" data-sitekey="@RecaptchaSettings.Value.SiteKey"></div>
Em seguida, você pode simplesmente usar @RecaptchaSettings.Value.SiteKey para fazer referência à sitekey. E na página Razor, você pode usar a injeção de dependência para obter a interface IRecaptchaService, que fornece a função Validar. Estes são chamados para validar a chamada.
Ficará assim:
public async Task<IActionResult> OnPostAsync()
{
bool captchaValid = await _recaptcha.Validate(Request);
if (!captchaValid)
{
ModelState.AddModelError("reCaptcha", "Bitte das reCaptcha bestätigen.");
}
if (ModelState.IsValid)
{
return Page();
}
else
{
ViewData["Message"] = "Schiefgegangen";
return Page();
}
}