2010-03-31 27 views
1

我試圖在.NET 1.1項目,該項目可以在這裏找到使用舊版本的ReCaptcha驗證的:http://recaptcha.googlecode.com/svn/trunk/recaptcha-plugins/dotnet-old/src/Recaptcha/的Recaptcha驗證在.NET 1.1項目

我的代碼是非常相似的例子

<asp:TextBox ID="EmailAddress" runat="server"></asp:TextBox> 
<recatpcha:RecaptchaValidator ID="RecaptchaValidator1" runat="server" Theme="Clean" PublicKey="xxxxxxxxxxxxxx" PrivateKey="xxxxxxxxxx" ControlToValidate="EmailAddress"></recatpcha:RecaptchaValidator> 
<asp:Button ID="Button1" runat="server" Text="Button" CausesValidation="true" OnClick="Button1_Click" /> 

我想的行爲很簡單:可在上面的鏈接中找到的網頁加載時,用戶會看到一個字段中輸入他們的電子郵件地址,驗證碼即可完成,並提交按鈕。提交時,如果我們的數據庫中找不到用戶使用該電子郵件地址,或者驗證碼的回答不正確,則會顯示一個新的驗證碼以及相應的錯誤消息。否則,他們將收到一封關於如何重置密碼的電子郵件。

的主要問題是,驗證碼不能在頁面加載顯示。然而,當我點擊提交按鈕時,觸發Page.Validate(),頁面被重新加載並顯示驗證碼。

在此基礎上,我想我會嘗試不同的方法,並在頁面加載事件調用Page.Validate()來獲取驗證碼最初露面。這幾乎奏效了:驗證碼出現在第一頁加載時,但是當一個無效的電子郵件與正確的驗證碼答案一起提交時,驗證碼在頁面重新加載時消失,但當然不能發送電子郵件。

如何我要麼強制驗證碼當頁面最初打被渲染,或者,防止輸入無效的電子郵件地址時,所提交的驗證碼?

回答

1

嗯,它不漂亮,但我得到它的工作。

由於使用RecaptchaValidator標籤沒有工作,我想它的方式,我用的ReCaptcha AJAX API(http://recaptcha.net/apidocs/captcha/client.html)嵌入在網頁上正是如此小部件:

$(document).ready(function() { 
    Recaptcha.create("<public key>", 
     "ReCaptcha", { 
     theme: "clean", 
     callback: Recaptcha.focus_response_field 
    }); 
}); 

而且,由於所有的數據需要驗證與recaptcha服務器(挑戰,公鑰等,更多信息在這裏:http://recaptcha.net/apidocs/captcha/)是在POST中,我實例化一個新的RecaptchaValidator,設置其餘屬性,並調用方法來驗證用戶響應。

protected void Submit_Click(object sender, System.EventArgs e) 
{ 
    RecaptchaValidator RecaptchaValidator1 = new RecaptchaValidator(); 
    RecaptchaValidator1.Page = this; 
    RecaptchaValidator1.PrivateKey = "<private key>"; 
    RecaptchaValidator1.PublicKey = "<public key>"; 

    bool CaptchaPassed = RecaptchaValidator1.ValidateUserResponse(); 

    if (CaptchaPassed) 
    {  
     //hide the captcha, do some stuff 
    }  
} 

不可否認,有點不好意思,但它完成了工作。

注意 - 我在問題中提到了這一點,只是重申:此服務器端代碼使用老,.NET 1.1兼容的reCAPTCHA插件。問題在於插件的代碼鏈接。我有令人尷尬的低代表,並且不能再使用超鏈接>。 <