如何在服务器调用中验证 recaptcha?
Posted
技术标签:
【中文标题】如何在服务器调用中验证 recaptcha?【英文标题】:How to verify recaptcha in server call? 【发布时间】:2017-10-12 15:23:31 【问题描述】:情况:
我曾经用一个简单的表单来检查我的recaptcha,用POST提交到“/login”。
出于安全原因,我需要更改我的实现,并希望执行以下操作:
1) Jquery 表单提交。
2) 调用服务器以在服务器上调用 verify recaptcha。
3) 无需重新加载页面即可接收响应。
4) 根据响应是否接受登录请求。
问题:
看起来我可以发出 AJAX 请求?但我不知道怎么做。
客户代码:
<div class ="containerMargins">
<h1 class = "authTitle">Login</h1>
<form id="loginForm">
<div class="form-group">
<label>Email</label>
<input type="email" class="form-control" name="email" id="loginEmail" placeholder="You can't forget it :)" required>
</div>
<div class="form-group">
<label>Password</label>
<input type="password" class="form-control" name="password" id="loginPassword" placeholder="We hope you didn't forget it ^^" required minlength="12">
</div>
<div class="g-recaptcha" data-sitekey="6LcRrxMUAAAAANx-AXSdRLAo4Pyqfqg-1vuPSJ5c"></div>
<button class="btn btn-default" id="loginButton">Submit</button> <span class="userLinks">
<a class="logLinks" href="/users/register">Register</a><a href="/users/password">Password?</a></span>
</form>
</div>
</div>
<% include ../partials/indexScripts %>
<script>
$("#loginForm").submit(function(e)
e.preventDefault();
var email = $("#loginEmail").val();
var password = $("#loginPassword").val();
// WOULD LIKE TO MAKE SERVER CALL HERE TO CHECK RECAPTCHA BUT I DONT KNOW HOW
$this = $(this);
$.ajax(
type: "POST",
url: "users/register",
data: $this.serialize()
).done(function(data)
if (successfulRecaptcha)
firebase.auth().signInWithEmailAndPassword(email, password ).then( authData =>
else
console.log("You are a robot!");
服务器代码:
router.post('/login', function(req, res, next)
verifyRecaptcha(req.body["g-recaptcha-response"], function(success)
if (success)
else
);
);
【问题讨论】:
那个 NodeJS 在服务器上吗?你没有指定 @DannyZB 是的。是的。 【参考方案1】:我找到了解决方案:
前端:
$this = $(this);
$.ajax(
type: "POST",
url: "login",
data: $this.serialize()
).done(function(data)
if (data == true)
后端:
router.post('/login', function(req, res, next)
verifyRecaptcha(req.body["g-recaptcha-response"], function(success)
if (success)
res.send(true);
else
res.send(false);
);
);
【讨论】:
以上是关于如何在服务器调用中验证 recaptcha?的主要内容,如果未能解决你的问题,请参考以下文章
如何在服务器端验证 Google reCAPTCHA v3?
Google reCAPTCHA:如何在服务器端获取用户响应和验证?
Google reCaptcha 2 TypeError:调用 grecaptcha.reset 后 a 为空