まず、Google ReCaptchaを自分のログインフォームに結びつけるのが難しいです。ちょっとした背景情報のために、これはSSL証明書付きのライブウェブサーバー上で実行されています。私は正しいサイトと秘密鍵とそのすべてのジャズを持っています。だからここGoogle ReCaptchaがパスしないと、ユーザーのログインを許可しない方法はありますか?
<?php
if (isset($_POST['submit'])) {
$userid = $_POST["userid"];
$password = $_POST["password"];
$secretkey = "_MY SECRET KEY_";
$responsekey = $_POST["g-recaptcha-response"];
$useripaddress = $_SERVER["REMOTE_ADDR"];
$url = "https://www.google.com/recaptcha/api/siteverify?secret={$secretkey}&response={$responsekey}&remoteip={$useripaddress}";
$response = file_get_contents($url);
echo $response;
}
require_once("scripts/thecrab.php");
$userid = htmlspecialchars($_POST['userid']);
$password = htmlspecialchars($_POST['password']);
$query = "SELECT userid from users where userid = ? and password = PASSWORD(?)";
$stmt = $pdo->prepare($query);
$stmt->execute([$userid, $password]);
if (!$stmt->rowCount() & $response->success == 0) {
echo "<h2>Sorry, your user account was not validated.</h2><br>\n";
echo "<a href=\"index.php?content=login\">Try again</a><br>\n";
echo "<a href=\"index.php\">Return to Home</a>\n";
} else {
$_SESSION['valid_recipe_user'] = $userid;
echo "<h2>Log In Successful</h2><br>\n";
echo "<a href=\"index.php\"><img src=\"images/image-11.png\"></a>\n";
}
?>
を私は持っていますいくつかの問題があります:
<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>
そして、私のスクリプトを検証する:
は、ここに私のログインフォームです。私のページの上部にある情報を確認すると、私は echo $ responseを得ています。 これは厳密にはテスト目的のためです。ReCaptchaがtrueまたはfalseとして戻ってくるかどうかを確認できるようにしていますが、ReCaptchaを記入しても、セキュリティ設定が何であっても常にfalseに戻りますGoogleサイト私はそれが読みやすい形式で結果をバック吐くことができるように検証周りの事前のタグを追加し、私は私がするCaptchaを記入しても、これで迎えています:
今{
"success": false,
"error-codes": [
"missing-input-response"
]
}
、私はこだわっているので、永遠の "偽"で、私は成功を偽(すなわち、0)し、その後ログインしないでログインする場合、if文にショットを入れて実装することに決めました。かなりシンプル、そしてあなたは、if文で私の検証ページの一番下にあることを確認することができます。これまでのところ
if (!$stmt->rowCount() & $response->success == 0)
私は、サーバーにそれをFTPでリフレッシュし、それをやってみる、とても良いです。しかし、今回はエラーが発生し、変数$ responseが未定義であることが示されています。
if (isset($_POST['submit'])) // Checks to see if the form was submitted
そして、それは提出がで設定されているのを見て、私は、名前=「提出」を持ってログインボタンを押して、それが提出されました:まあ、私は私が言った検証ページの上部にある変数を定義しましたPHPの仕組みを知っていてifの後ろにあるものを実行し、一番下は$ responseを定義するところです。私が知る限り、PHPでは変数がどのブロックに定義されているかは関係ありません。実行される限り、どこでも使用できます。
したがって、すべてのすべてで、私がいる問題は次のとおりです。
- reCAPTCHAのは、常に$応答を明記スロー偽
- エラーは、それが持つ#2で
- ネクタイを定義されているにもかかわらず、定義されていないと評価されましたvariableは未定義であるため、if文を実行することはできません。
私は自分のスキルセットのほとんどすべてを試しました。
あなたがreCAPTCHAのを検証しているところ、私は見ることができますか? like if($ response-> is_valid){// code} –
@Brianどのrecaptchaのバージョンを使用していますか? 2.0最新のもの? –
@SaadSuriはい、それは検証フォームの一番下にあります。 ($ stmt-> rowCount()&$ response-> success == 0) $ stmtは$ $ useridと$ passwordをデータベースと比較しています。 false/0に戻ってきたら、以下の内容を実行してログインにリダイレクトします。しかし、recaptchaは常にfalseに評価されています。 編集:はい、私はv2.0を使用しています – Brxxn