0

Я что-то упустил? Я скопировал этот фрагмент кода через:Новая рекомендация Google не подтверждена

Automatically render the reCAPTCHA widget

Я вошел в моем зарегистрированные данных-sitekey. ReCAPTCHA отображает и работает, когда я устанавливаю флажок, но если я не проверю флажок и не отправлю свою форму, reCAPTCHA не прекратит подачу пользователя, и мой контроллер обработает запрос.

@model Medicaid.WebUI.ViewModels.RequestModel 

<script src='https://www.google.com/recaptcha/api.js' async defer></script> 

<table class="table"> 
<tr> 
    <td> 
     @using (Html.BeginForm("Index", "Home", FormMethod.Post, new { id = "request-form", @class = "form-horizontal" })) 
     { 
     @Html.AntiForgeryToken() 
     <fieldset> 
      <legend>Request</legend> 
      <div class="form-group"> 
      <label for="inputFirstName" class="col-lg-2 control-label">First Name</label> 
      <div class="col-lg-10"> 
       <input type="text" value="@Model.FirstName" class="form-control" maxlength="50" name="FirstName" id="FirstName" placeholder="First Name" required> 
      </div> 
      </div> 
      <div class="form-group"> 
      <label for="inputLastName" class="col-lg-2 control-label">Last Name</label> 
       <div class="col-lg-10"> 
       <input type="text" value="@Model.LastName" class="form-control" maxlength="50" name="LastName" id="LastName" placeholder="Last Name" required> 
       </div> 
       </div> 
       <div class="form-group"> 
        <label for="inputEmail" class="col-lg-2 control-label">Email</label> 
        <div class="col-lg-10"> 
         <input type="email" value="@Model.Email" class="form-control" maxlength="100" name="Email" id="Email" placeholder="Email" required> 
        </div> 
       </div> 

       <div class="form-group"> 
        <div class="col-lg-10 col-lg-offset-2"><br /><br /> 
         <div class="g-recaptcha" data-sitekey="IenterMykeyHere"></div><br /><br /> 
         <button type="submit" class="btn btn-primary">Submit Request</button> 
        </div> 
       </div> 
      </fieldset> 
     } 
    </td> 
</tr> 
</table> 
<br /><br /> 
@Html.ValidationSummary() 

ответ

0

У меня был этот вопрос и перечитал документацию, и работал его как следующее:

function onBegin() { 
    $("input[type='hidden']").val(grecaptcha.getResponse()); 
} 

Вы должны добавить яваскрипта функцию в параметре «onBegin» из AjaxOptions объект из помощника html MVC, который скопирует значение ответа виджета на скрытую переменную, которую необходимо объявить внутри вашей формы, поэтому кнопка отправки отправляет ее контроллеру. Не забудьте добавить переменную с тем же именем в модель представления «RequestModel», чтобы передать ее привязку модели mvc, и вы сможете на сервере узнать, нажал ли пользователь кнопку или нет ,

@using (Ajax.BeginForm("NewRecaptchaVerify", "ReCaptcha", new AjaxOptions 
{ 
    HttpMethod = "Post", 
    OnSuccess = "onSuccess", 
    OnFailure = "onFailure", 
    OnBegin = "onBegin", 
    OnComplete = "onComplete" 
})) 
{ 
    @Html.HiddenFor(m => m.Response) 
    <div class="g-recaptcha" data-sitekey="your-site-key"></div> 
    <input type="submit" id="btnSubmit" value="Submit" /> 
} 

(для записи, я сейчас сталкиваются с проблемой зная, на сервере, в тех случаях, когда виджет запроса пользователю ввести ввод текста, после нажатия на кнопку - будь он она вошла/текст или нет. Мне кажется, что в итоге у меня не будет выхода, кроме выполнения запроса GET, на сервере, на api виджета, как они помещают его в документацию: https://www.google.com/recaptcha/api/siteverify?secret=your_secret&response=response_string&remoteip=user_ip_address