首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET 1.1项目中的Recaptcha验证器

.NET 1.1项目中的Recaptcha验证器
EN

Stack Overflow用户
提问于 2010-04-01 04:33:00
回答 1查看 1.1K关注 0票数 1

我正在尝试在一个.net 1.1项目中使用旧版本的Recaptcha Validator,可以在这里找到:http://recaptcha.googlecode.com/svn/trunk/recaptcha-plugins/dotnet-old/src/Recaptcha/

我的代码与上面的链接中的示例非常相似:

代码语言:javascript
复制
<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" />

我想要的行为很简单:在页面加载时,用户会看到一个字段来输入他们的电子邮件地址,一个验证码来完成,还有一个提交按钮。在提交时,如果在我们的数据库中没有找到具有该电子邮件地址的用户,或者验证码回答错误,则会显示一个新的验证码以及相应的错误消息。否则,他们将收到一封关于如何重置其密码的电子邮件。

主要问题是验证码在页面加载时不显示。但是,当我点击submit按钮,触发Page.Validate()时,页面会重新加载,验证码也会显示出来。

基于此,我认为我应该尝试一种不同的方法,并在页面加载事件中调用Page.Validate()以使验证码最初显示出来。这几乎是有效的:验证码在第一个页面加载时显示,但当提交一个无效的电子邮件和正确的验证码答案时,验证码在页面重新加载时消失,但当然,电子邮件无法发送。

如何在页面初始命中时强制呈现验证码,或者在输入无效的电子邮件地址时阻止提交验证码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-04-07 05:48:06

嗯,不是很漂亮,但我把它修好了。

由于使用RecaptchaValidator标记没有按照我想要的方式工作,因此我使用recaptcha AJAX API (http://recaptcha.net/apidocs/captcha/client.html)将小部件嵌入到页面上:

代码语言:javascript
复制
$(document).ready(function() {
    Recaptcha.create("<public key>",
        "ReCaptcha", {
        theme: "clean",
        callback: Recaptcha.focus_response_field
    });
});

然后,由于所有数据都需要使用recaptcha服务器进行验证(挑战、公钥等更多信息:http://recaptcha.net/apidocs/captcha/)都在POST中,所以我实例化了一个新的RecaptchaValidator,设置了其余的属性,并调用了验证用户响应的方法。

代码语言:javascript
复制
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插件。问题中提供了插件代码的链接。我有令人尴尬的低代表,不能使用更多的超链接>.<

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2556274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档