Php 如果Google ReCaptcha没有通过,我怎么才能不允许用户登录呢?
首先,我很难将GoogleReCAPTCHA绑定到我的登录表单中。只需要一些背景信息,这些都是在一个带有SSL证书的实时Web服务器上运行的,我有正确的站点和密钥以及所有这些 这是我的登录表:Php 如果Google ReCaptcha没有通过,我怎么才能不允许用户登录呢?,php,recaptcha,Php,Recaptcha,首先,我很难将GoogleReCAPTCHA绑定到我的登录表单中。只需要一些背景信息,这些都是在一个带有SSL证书的实时Web服务器上运行的,我有正确的站点和密钥以及所有这些 这是我的登录表: <html> <head> <script src='https://www.google.com/recaptcha/api.js'></script> </head> <body> <br /> <p&
<html>
<head>
<script src='https://www.google.com/recaptcha/api.js'></script>
</head>
<body>
<br />
<p>Please log in to your account below:</p>
<form action="index.php" method="post" target="_self">
<b>User Name:</b><br>
<input type="text" size="20" name="userid"><br />
<br />
<b>Password:</b><br>
<input type="password" size="20" name="password"><br />
<br />
<div class="g-recaptcha" data-sitekey="_MY PUBLIC SITE KEY_"></div>
<br />
<input type="submit" name="submit" value="Login">
<input type="hidden" value="validate" name="content">
</form>
现在,由于我被一个永恒的错误所困扰,我决定尝试一下if语句并在中实现,如果成功为false,即0,那么不要登录,否则登录。非常简单,您可以在if语句的验证页面底部看到:
if (!$stmt->rowCount() & $response->success == 0)
到目前为止还不错,我把它上传到服务器上,刷新并试一试。但这次我得到一个错误,它表明变量$response未定义。我在验证页面的顶部定义了变量,我说:
if (isset($_POST['submit'])) // Checks to see if the form was submitted
它是在我点击登录按钮时提交的,这个按钮的name=submit,所以它看到submit被设置为Login的值,所以如果你知道PHP是如何工作的,它会执行下面的命令,在底部它定义了$response。据我所知,在PHP中,定义变量的块并不重要,只要它被执行,它就可以在任何地方使用
总而言之,我面临的问题是:
ReCaptcha的计算结果始终为False
抛出错误,说明$response未定义,尽管已定义
与2关联,因为变量未定义,所以无法执行if语句。
我几乎已经尝试了我的所有技能。再次检查您要传递到的参数。 响应参数必须是response而不是respone 这会导致服务器返回错误-缺少输入响应意味着您没有传递g-recaptcha-response参数 现在,响应工作正常: file_get_contents将返回一个字符串,其中包含JSON响应。如果您希望以您在此处访问的方式访问JSON中的成功值
if (!$stmt->rowCount() & $response->success == 0) {
然后您必须首先使用json_decode从字符串中创建一个对象
同一行中的if逻辑使用的是按位AND运算符,就像使用单个“与”一样&而不是&&
逻辑本身-当前,如果不存在任何用户帐户,并且recaptcha失败,则将出现错误,否则它是有效的。问题在于,如果没有用户,但recaptcha正常,则该用户有效;如果用户正常,且recaptcha失败,则该用户仍然有效。我猜你是想用或代替和:
if (!$stmt->rowCount() || $response->success == 0) {
我能看看你在哪里验证你的recaptcha吗?比如$response->is\u valid{//code}@Brian您使用的是哪个版本的recaptcha?2.0最新版本?@SaadSuri是的,它位于验证表单的底部。如果$stmt->rowCount&$response->success==0$stmt正在将我的$userid和$password与数据库进行比较,因此如果返回false,而我的response->success返回false/0,它将执行下面的内容,重定向回登录。但recaptcha的评估结果总是错误的。编辑:是的,我正在使用v2.0。在使用$response->success之前,您是否检查了$response->success以查看其中的内容?@SaadSuri是的,在我的验证页面顶部,我将g-recaptcha-reponse存储到$responsekey中,然后将其发送到谷歌,并附加到URL,并将$URL的内容存储到$response中,然后我回应$response,我得到了成功的回应-错,我在我的帖子中说了这一切。哇!总是一个简单的错误把一切都抛在脑后!非常感谢你。现在我得到了一个响应,它正确地返回,成功为true,时间戳和主机名。亲爱的,现在我正在努力让if/else语句正常工作。我目前的设置方式是否不正确?
if (!$stmt->rowCount() & $response->success == 0) {
if (!$stmt->rowCount() || $response->success == 0) {