如何为 Kentico 实现 Recaptcha V3?
How to implement Recaptcha V3 for Kentico?
我们将为我们的网站应用 Recaptcha V3。但是Kentico只支持V2。
那么有没有文档或指南可以做到这一点?
还是应该继续使用 V2?
谢谢,
德黄
我通过构建自定义代码来呈现 V3 验证码解决了这个问题。
然后我会在保存表格之前检查验证码。
步骤如下:
- 创建一个 Class > 验证 ReCaptcha 的函数 - 请参阅附加代码;
- 在此事件中调用函数验证:viewBiz_OnBeforeSave 提交表单后;
- 如果有效则存储信息
您可以通过 Ajax 或直接提交来使用它。
public static GooogleRecaptchaResponse ValidateGgRecaptchaToken(string responseToken, Action InvalidHandler) {
if (string.IsNullOrEmpty(responseToken)) {
EventLogProvider.LogInformation("ValidateGgRecaptchaToken", "Invalid", "Recaptcha was empty");
InvalidHandler?.Invoke();
return null;
}
string secretKey = SettingsKeyInfoProvider.GetValue(WebUtils.CaptchaSecretKeyName);
var request = (HttpWebRequest) WebRequest.Create("https://www.google.com/recaptcha/api/siteverify");
var postData = "response=" + responseToken;
postData += "&secret=" + secretKey;
var data = Encoding.ASCII.GetBytes(postData);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
using(var stream = request.GetRequestStream()) {
stream.Write(data, 0, data.Length);
}
var response = (HttpWebResponse) request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
var res = JsonConvert.DeserializeObject < GooogleRecaptchaResponse > (responseString);
if (res == null || !res.success || res.score < 0.5) {
EventLogProvider.LogInformation("ValidateGgRecaptchaToken", "Invalid", JsonConvert.SerializeObject(res));
InvalidHandler?.Invoke();
}
return res;
}
我们将为我们的网站应用 Recaptcha V3。但是Kentico只支持V2。
那么有没有文档或指南可以做到这一点?
还是应该继续使用 V2?
谢谢, 德黄
我通过构建自定义代码来呈现 V3 验证码解决了这个问题。
然后我会在保存表格之前检查验证码。
步骤如下:
- 创建一个 Class > 验证 ReCaptcha 的函数 - 请参阅附加代码;
- 在此事件中调用函数验证:viewBiz_OnBeforeSave 提交表单后;
- 如果有效则存储信息
您可以通过 Ajax 或直接提交来使用它。
public static GooogleRecaptchaResponse ValidateGgRecaptchaToken(string responseToken, Action InvalidHandler) {
if (string.IsNullOrEmpty(responseToken)) {
EventLogProvider.LogInformation("ValidateGgRecaptchaToken", "Invalid", "Recaptcha was empty");
InvalidHandler?.Invoke();
return null;
}
string secretKey = SettingsKeyInfoProvider.GetValue(WebUtils.CaptchaSecretKeyName);
var request = (HttpWebRequest) WebRequest.Create("https://www.google.com/recaptcha/api/siteverify");
var postData = "response=" + responseToken;
postData += "&secret=" + secretKey;
var data = Encoding.ASCII.GetBytes(postData);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
using(var stream = request.GetRequestStream()) {
stream.Write(data, 0, data.Length);
}
var response = (HttpWebResponse) request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
var res = JsonConvert.DeserializeObject < GooogleRecaptchaResponse > (responseString);
if (res == null || !res.success || res.score < 0.5) {
EventLogProvider.LogInformation("ValidateGgRecaptchaToken", "Invalid", JsonConvert.SerializeObject(res));
InvalidHandler?.Invoke();
}
return res;
}