Captcha Control added to ASP.NET Page.
<li> //Captcha Control <cc1:CaptchaControl ID="myCaptchaControl" ClientIDMode="Static" Width="800" Height="75" ImageWidth="400" ImageHeight="75" Minimum="5" Maximum="6" CaptchaHandlerUrl="~/CaptchaHandler.ashx" Overlap="6" RefreshButtonPath="~/Images/refresh.png" runat="server" /> <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder> Please enter characters displayed above <asp:TextBox ID="CaptchaCharacters" ClientIDMode="Static" Text="" Width="100" ToolTip="Enter characters displayed above" runat="server"> </asp:TextBox> <asp:RequiredFieldValidator runat="server" ValidationGroup="RegisterGroup" ontrolToValidate="CaptchaCharacters" CssClass="field-validation-error" ErrorMessage="*Required" /> </li>
Below the Capthca Control, I added a Textbox, which is where the user would type the Captcha characters and will be verified once the form is submitted.
Code Behind - Verifing Captcha Characters
Note: Captcha control had been place within a CreateUserWizard control. Referencing Captcha Control, I must FindControl within CreateUserWizard control (ID="RegisterUserWizardStep").
//CreatingUser is raised before the Memebership Provider's CreateUser. Setting LoginCancelEventArgs Cancel property equal to true, the user will not be created.
protected void RegisterUser_CreatingUser(object sender, LoginCancelEventArgs e)
{
var err = ((Literal)GetControl("ErrorMessage"));
var parent = err.Parent;
err.Text = "";
Page.Validate();
if (!Page.IsValid)
{
err.Text = "Required fields are empty or incorrect information was entered.";
e.Cancel = true;
}
else
{
//Initiate the EncodeCaptcha class
var ec = new EncodeCaptcha(GetCaptchaKey());
//GetCaptchaCharacters returns clear Captcha characters represented in the displayed image.
//Test they must be equal
if (ec.characters != GetCaptchaCharacters())
{
err.Text = "Characters incorrectly entered. Please reenter correct characters displayed";
e.Cancel = true;
}
}
}
//Return submited Captcha characters. the characters that the user had entered.
string GetCaptchaCharacters()
{
return ((TextBox)GetControl("CaptchaCharacters")).Text;
}
//Return encrypted Captcha character string. The encrypted string had be UrlEncode, so the return
//string is UrlDecoded.
string GetCaptchaKey()
{
var cc = GetControl("myCaptchaControl");
var captchaCharacters = (HiddenField)cc.FindControl("Captcha-Key");
return HttpUtility.UrlDecode(Request[captchaCharacters.UniqueID]);
}
//Abstracted findng fields within CreateUserWizard.
Control GetControl(string value)
{
return RegisterUserWizardStep.ContentTemplateContainer.FindControl(value);
}
No comments:
Post a Comment