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!