首先调用 Google 获取令牌contact_m.cfm
并将其提交到同一页面以进行验证。接下来使用 ColdFusion 调用来保护密钥。远程调用该函数以调用 ColdFusion 函数。这样做是因为实现了 ColdFusion 渲染并且不寻找更改。
grecaptcha.ready(function() {
grecaptcha.execute('token', {action: 'contact'}).then(function(token) {
$.ajax(
{
url: "./contact_m.cfm",
type: "post",
contentType: "application/json",
data: JSON.stringify( {googleToken: token} ),
success: function(result){
$.get('./contact_m.cfm?func=googleVerification', function (r) {
});
}
});
});
});
使用 Google 验证令牌:
<cffunction access="public" name="googleVerification">
<cfargument required="true" type="any" name="myArgument">
<cfset requestBody = toString( getHttpRequestData().content ) />
<cfif isJSON( requestBody )>
<cfset token = DeserializeJSON(#requestBody#)/>
<cfhttp method="post" url="https://www.google.com/recaptcha/api/siteverify" result="googleResult">
<cfhttpparam name="secret" type="formField" value="6Lf9IrAUAAAAAOhEdBvk1ZyIKX6eUqS06GaSXG_F">
<cfhttpparam name="response" type="formField" value="#token.googleToken#">
</cfhttp>
<cfset googleResponse = DeserializeJSON(#googleResult.FileContent#)/>
<cfset isHuman = #googleResponse.success#/>
</cfif>
</cffunction>
和 JavaScript 函数来检查 Google 是成功还是失败:
<script>
function validateHuman(){
<cfoutput>
var #toScript(isHuman, "isHuman")#;
</cfoutput>
console.log(isHuman);
if (isHuman == 'YES') {
return true;
} else return false;
}
</script>
如果 Google 验证,则允许用户提交表单:
<form id="form3" action="contact_m.cfm" method="post" onsubmit="return validateHuman();">
我收到错误消息:isHuman
未定义。相关问题:带有 ColdFusion 的 reCaptcha v3