Использование reCaptcha с BlogEngine.net - PullRequest
2 голосов
/ 11 августа 2009

Я только что установил reCaptcha на свой сайт и установил контроль над моим комментарием, пока все хорошо.

Теперь, чтобы проверить reCaptcha, просто введите Page.IsValid.

Однако BlogEngine использует Ajax и некоторые JS для публикации своей функции addComment, и если я проверяю ее там, я просто получаю ошибку на странице в строке состояния.

Вот функция поста bloengine -

/// <summary>
/// Processes a callback event that targets a control.
/// </summary>
/// <param name="eventArgument">A string that represents an event argument to pass to the event handler.</param>
public void RaiseCallbackEvent(string eventArgument)
{
    if (!BlogSettings.Instance.IsCommentsEnabled)
        return;

    string[] args = eventArgument.Split(new string[] { "-|-" }, StringSplitOptions.None);
    string author = args[0];
    string email = args[1];
    string website = args[2];
    string country = args[3];
    string content = args[4];
    bool notify = bool.Parse(args[5]);
    bool isPreview = bool.Parse(args[6]);
    string sentCaptcha = args[7];
    //If there is no "reply to" comment, args[8] is empty
    Guid replyToCommentID = String.IsNullOrEmpty(args[8]) ? Guid.Empty : new Guid(args[8]);

    string storedCaptcha = hfCaptcha.Value;

    Comment comment = new Comment();
    comment.Id = Guid.NewGuid();
    comment.ParentId = replyToCommentID;
    comment.Author = Server.HtmlEncode(author);
    comment.Email = email;
    comment.Content = Server.HtmlEncode(content);
    comment.IP = Request.UserHostAddress;
    comment.Country = country;
    comment.DateCreated = DateTime.Now;
    comment.Parent = Post;
    comment.IsApproved = !BlogSettings.Instance.EnableCommentsModeration;

    if (Page.User.Identity.IsAuthenticated)
        comment.IsApproved = true;

    if (website.Trim().Length > 0)
    {
        if (!website.ToLowerInvariant().Contains("://"))
            website = "http://" + website;

        Uri url;
        if (Uri.TryCreate(website, UriKind.Absolute, out url))
            comment.Website = url;
    }

    if (notify && !Post.NotificationEmails.Contains(email))
        Post.NotificationEmails.Add(email);
    else if (!notify && Post.NotificationEmails.Contains(email))
        Post.NotificationEmails.Remove(email);

    if (!isPreview)
    {
        Post.AddComment(comment);
        SetCookie(author, email, website, country);
    }

    string path = Utils.RelativeWebRoot + "themes/" + BlogSettings.Instance.Theme + "/CommentView.ascx";

    CommentViewBase control = (CommentViewBase)LoadControl(path);
    control.Comment = comment;
    control.Post = Post;

    using (StringWriter sw = new StringWriter())
    {
        control.RenderControl(new HtmlTextWriter(sw));
        _Callback = sw.ToString();
    }
}

Я попытался просто поставить if (! Page.IsValid) return; но это никогда не сработало.

Ответы [ 3 ]

2 голосов
/ 17 августа 2009

API reCaptcha по умолчанию не работает с веб-страницами, управляемыми AJAX, особенно при замене контента, в котором находится reCaptcha. Проблема здесь заключается в API reCaptcha по умолчанию. Просто переключитесь на AJAX API, который также предлагается здесь

1 голос
/ 13 августа 2009
var captchaChallengeValue = filterContext.HttpContext.Request.Form["recaptcha_challenge_field"];
var captchaResponseValue = filterContext.HttpContext.Request.Form["recaptcha_response_field"];
var captchaValidator = new Recaptcha.RecaptchaValidator
{
    PrivateKey = "private key here",
    RemoteIP = filterContext.HttpContext.Request.UserHostAddress,
    Challenge = captchaChallengeValue,
    Response = captchaResponseValue
};

var recaptchaResponse = captchaValidtor.Validate();

Вот так я и сделал на другом сайте. Я взял то, что было введено, и ответ, а затем создал новый captchaValidator, у которого есть метод, который проверит, действительны ли ответы. Затем используйте это в качестве логического значения для вашего if.

Я использую ASP.Net MVC. Но я бы предположил, что идея похожа.

Надеюсь, это поможет.

0 голосов
/ 07 ноября 2010

Теперь 1.6.1 имеет встроенную поддержку reCaptcha Увидеть Включить ReCaptcha

...