Utilizando CAPTCHA para validação

Creio que todo mundo já passou por alguma validação de formulário na qual precisava digitar um código que é exibido em uma imagem para que a validação ocorra "adequadamente" (digamos por um usuário e não por um robô). Um utilitário que expandiu drasticamente pela web e uso quase que comum pela comunidade é do reCAPTCHA. Muito fácil de utilizar, ele já fornece DLL/Implementações para algumas linguagens tais como o PHP, .NET, Wordpress e outros. Nesse caso, vamos nos atentar ao plugin do ASP.NET. Nesse link contém informações de como proceder e utilizar o plugin.


O processo consiste basicamente na download da DLL, incorporação dela no projeto através inserindo-a na pasta Bin ou dando Add Reference. Na página a ser utilizada, incorpore o código de registro dela e assim pode-se utilizá-la.

Antes de utilizá-la, deve-se gerar uma chave pública e privada para que se processe a criptografia dos dados. Para gerar, você deve se cadastrar aqui e preenche o formulário até que, ao final, seja exibida as chaves. Sem as chaves, o CAPTCHA não funciona.

Então você terá o seguinte código (semelhante):

<%@ Register Assembly="Recaptcha" Namespace="Recaptcha" TagPrefix="recaptcha" %>

<recaptcha:RecaptchaControl ID="recaptcha" runat="server" PublicKey="chavepublica" PrivateKey="chaveprivada" />

Para realizar a validação, deve apenas analisar a seguinte propriedade no PostBack:

recaptcha.IsValid

Na qual irá retornar um booleano se digitou os caracteres corretamente ou não.

Pronto! Basicamente você já está apto a utilizar o CAPTCHA para validar as entradas em seu web-site. Muito bom a utilização, contudo há dois problemas que vi muitas pessoas tendo: utilizar em Português e no AJAX.

Quando você obtêm a DLL não há uma forma de configurar para o português. Para fazer isso você deve obter o projeto da DLL no Source Project deles, abrir e setar manualmente a linguagem ou criar um método público para que faça isso a nível de utilização.

Baixe através do SVN ou via HTTP uma das versões para ASP.NET. Abra o projeto e entre no arquivo RecaptchaControl.cs e procure o método protected override void RenderContents(HtmlTextWriter output). Após a linha output.WriteLine("theme : '{0}',", this.theme ?? string.Empty); insira a seguinte linha:

output.WriteLine("lang : '{0}',", this.lang ?? "pt");

Ainda não compile. No região de declaração de variáveis (em #region Private Fields), insira a variável:

private string lang;

E nas propriedades (em #region Public Properties) insira o método:

[Category("Settings")]
[Description("Configura a linguagem para a desejada.")]
public string Linguagem
{
get { return this.lang; }
set { this.lang = value; }
}

Pronto! Agora compile o projeto e terá uma nova DLL preparada para indicar qualquer linguagem que o reCAPTCHA suporta. Volte ao seu projeto e atualize a referência da DLL para essa nova.

Agora, quando você está utilizando o ASP.NET AJAX juntamente com um UpdatePanel, ao realizar um PostBack, o reCAPTCHA some/desaparece e não é recarregado. O que fazer?

Bem, é fácil! Crie um UpdatePanel para o CAPTCHA exclusivamente. Deixe apenas o CAPTCHA dentro do ContentTemplate e coloque os atributos ChildrenAsTriggers="true" e UpdateMode="Conditional" no UpdatePanel. Agora insira quantas triggers forem precisas dos controles nos quais fazem PostBack nessa página. Ou seja, se houver um DropDownList ou um Button ou qualquer item que faça PostBack na página, eles devem ser inseridos aqui para que o CAPTCHA possa ser carregado caso um deles faça requisição ao servidor.

Seu código ficará parecido dessa forma:

<asp:UpdatePanel ID="PainelCaptcha" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional">
<ContentTemplate>
<recaptcha:RecaptchaControl ID="recaptcha" runat="server" PublicKey="chavepublica" PrivateKey="chaveprivada" />
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="BotaoValidacao" />
</Triggers>
</asp:UpdatePanel>

Problemas resolvidos!

0 comentários:

Postar um comentário