Использование Google gCaptcha с Legacy VB. Net Веб-страницы - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь добавить gcaptcha на устаревшую системную страницу с отправкой данных. Эта страница использует поля данных в таблице и кнопку отправки, которая не выполняет постбэк. На странице нет элемента формы, и он имеет код vb. net.

Код gcaptcha внешнего интерфейса работает визуально на странице. Однако серверный метод не вызывается при проверке gcaptcha и не влияет на отправку.

Какой метод реализации gcaptcha подходит для данного типа приложения и настройки?

Вот код клиента:

<script>
function printMe() {
    try {
        window.print();
    } catch (e) { }
}

var expiredCallback = function () {
    grecaptcha.reset();
}

var onloadCallback = function () {

    grecaptcha.render('gCaptcha', {
        'sitekey': '<sitekey>', 
        'theme': 'light',
        'size': 'normal',
        'type': 'image',
        'expired-callback': expiredCallback
    });
};
</script>

<script type="text/javascript" src="https://www.google.com/recaptcha/api.js? 
   onload=onloadCallback&render=explicit" defer="defer"></script>

    <tr>
            <td>
                <div id="gCaptcha" class="g-recaptcha">
                </div>
                <asp:TextBox ID="txtCaptcha" runat="server" Style="display: none" />
                <asp:RequiredFieldValidaton ID = "rfvCaptcha" ErrorMessage="Captcha validation is 
    required." ControlToValidate="txtCaptcha"
                    runat="server" ForeColor = "Red" Display = "Dynamic" />
                <div id="captchaErrorMsg" class="captchaErrorMsg" style="color:red;display:none;">
                </div>
                <br />
            </td>
        </tr>

    <tr>
            <td align="center">
                <table width="350px" class="table">
                    ...
                    <tr>
                        ...
                        <td align="center">
                            <input type="button" id="btnSubmitPayment" value="Submit" class="button1" 
    data-bind="enable: enableSubmit, click: handleSubmit"/>
                            <%Else%>
                        ...
                        </td>
                    </tr>
                </table>
            </td>
        </tr>

Вот код сервера:

Sub reCaptcha_Click(ByVal sender As Object, ByVal e As EventArgs)
    If (VerifyCaptcha()) Then
        MsgBox("Valid Recaptcha")
    Else
        MsgBox("Not Valid Recaptcha")
    End If

End Sub

Private Function VerifyCaptcha() As Boolean
    Dim Response As String = Request("g-recaptcha-response")
    Dim Valid As Boolean = False
    Dim req As HttpWebRequest = 
DirectCast(WebRequest.Create(Convert.ToString("https://www.google.com/recaptcha/api/siteverify?secret=<secret sitekey>&response=") & Response), HttpWebRequest)

    Try
        Using wResponse As WebResponse = req.GetResponse()

            Using readStream As New StreamReader(wResponse.GetResponseStream())
                Dim jsonResponse As String = readStream.ReadToEnd()
                Dim js As New JavaScriptSerializer()
                Dim data As MyObject = js.Deserialize(Of MyObject)(jsonResponse)

                Valid = Convert.ToBoolean(data.success)
                Return Valid
            End Using
        End Using
    Catch ex As Exception
        Return False
    End Try
End Function

Public Class MyObject
    Public Property success() As String
        Get
            Return m_success
        End Get
        Set(ByVal value As String)
            m_success = value
        End Set
    End Property
    Private m_success As String
End Class
...