この記事をご覧いただければ、もう Jiexian 認証についてまったく知らないわけではありません。ここでは、意味のないことには触れず、その使用方法について説明します。その前に、いくつかの URL を貼り付けておきます。使用されるもの:
公式 Web サイト: http://www.geetest.com/
公式ドキュメント: http://www.geetest.com/install/sections/idx-basic-introduction.html
github: https://github.com/GeeTeam/gt-php-sdk.git
使い方:
まず、ログインページなどのフロントエンドの利用ページを確認します
b5a35102e97be41e02968d9d0574c7312cacc6d41bbb37262a98f745aa00fbf0
481614e39d50063ec8ddceedd312377f3fa3f474cbb4b6d948eebecb1be5dde4
1. ログイン ページでインポートされたクラス ライブラリにアクセスします:
Web サイトが https を使用している場合は、Jiqian ライブラリが導入されている場所を https プロトコルに変更するだけで済みます。他の場所を変更する必要はありません。たとえば、次のコードに置き換えます:
1219a96a82800cca3c808cb42a60e37c2cacc6d41bbb37262a98f745aa00fbf0
f084025b2d169739a8fbe832d3f73a712cacc6d41bbb37262a98f745aa00fbf0
2. フロントエンドを初期化します
ページが読み込まれた後、次のコードを実行する必要があります。 jQuery を使用する場合、 $(function(){}); で記述できます。
$.ajax({ // 获取id,challenge,success(是否启用failback) url: "../web/StartCaptchaServlet.php?t=" + (new Date()).getTime(), // 加随机数防止缓存 type: "get", dataType: "json", success: function (data) { // 使用initGeetest接口 // 参数1:配置参数 // 参数2:回调,回调的第一个参数验证码对象,之后可以使用它做appendTo之类的事件 initGeetest({ gt: data.gt, challenge: data.challenge, product: "popup", // 产品形式,包括:float,embed,popup。注意只对PC版验证码有效 offline: !data.success // 表示用户后台检测极验服务器是否宕机,与SDK配合,用户一般不需要关注 }, handlerPopup); } });
上記のコードは、ページが読み込まれた後、指定した URL アドレスで認証コード情報を取得する必要があることを意味します。上記URLアドレス「../web/」 「StartCaptchaServlet.php」に何が書かれているかは、サーバーサイドのコード展開で詳しく説明します。
ただし、上記のコードには「handlerPopup」と呼ばれるコールバック関数があることに注意してください。この関数は、コードを検証するために必要な実際の初期化コードです。次のように:
// 代码详细说明 var handlerPopup = function (captchaObj) { // 注册提交按钮事件,比如在登陆页面的登陆按钮 $("#popup-submit").click(function () { // 此处省略在登陆界面中,获取登陆数据的一些步骤 // 先校验是否点击了验证码 var validate = captchaObj.getValidate(); if (!validate) { alert('请先完成验证!'); return; } // 提交验证码信息,比如登陆页面,你需要提交登陆信息,用户名和密码等登陆数据 $.ajax({ url: "../web/VerifyLoginServlet.php", type: "post", // dataType: "json", data: { // 用户名和密码等其他数据,自己获取,不做演示 username:username, password:password, // 验证码数据,这些数据不用自己获取 // 这是二次验证所需的三个值 // 当然,你也可以直接设置验证码单独校验,省略其他信息 geetest_challenge: validate.geetest_challenge, geetest_validate: validate.geetest_validate, geetest_seccode: validate.geetest_seccode }, // 这里是正确返回处理结果的处理函数 // 假设你就返回了1,2,3 // 当然,正常情况是返回JSON数据 success: function (result) { // 1表示验证码验证失败 if (result == "1") { alert("验证码验证失败!"); }else if (result == "2") { alert("用户名或密码错误!"); }else if (result == "3") { alert("登陆成功!"); // 登陆成功了,可以在这里做其他处理 }else{ alert("登陆错误!"); } } }); }); // 弹出式需要绑定触发验证码弹出按钮 // 比如在登陆页面,这个触发按钮就是登陆按钮 captchaObj.bindOn("#popup-submit"); // 将验证码加到id为captcha的元素里 // 验证码将会在下面指定的元素中显示出来 captchaObj.appendTo("#popup-captcha"); // 更多接口参考:http://www.geetest.com/install/sections/idx-client-sdk.html };
この時点では、すべてのフロント-最後の設定が書かれています。公式ドキュメント: http://www.geetest.com/install/sections/idx-client-sdk.html
3. サーバーサイド展開 (PHP)
最初のステップでは、 「../web/StartCaptchaServlet.php」のようなアドレス、このアドレスに何を書くか:
<?php // 引入文件 require_once dirname(dirname(__FILE__)) . '/lib/class.geetestlib.php'; require_once dirname(dirname(__FILE__)) . '/config/config.php'; // 实例化,实例化的参数在config中配置,分别是:验证ID 和 验证Key,如何获取下面会说。 $GtSdk = new GeetestLib(CAPTCHA_ID, PRIVATE_KEY); session_start(); // 这个是用户的标识,或者说是给极验服务器区分的标识,如果你项目没有预先设置,可以像下面这样设置: if(!isset($_SESSION['user_id'])){ $_SESSION['user_id']=uniqid();// 生成一个唯一ID } $user_id = $_SESSION['user_id']; // 或者,你就直接写成: // $user_id = "test"; // 生成验证码信息,并返回给客户端 $status = $GtSdk->pre_process($user_id); $_SESSION['gtserver'] = $status; $_SESSION['user_id'] = $user_id; echo $GtSdk->get_response_str(); ?>
認証IDと認証キーの取得方法:
1.認証バックグラウンドからアカウントを登録します
2.現在の検証 ID/キーのセットを取得するための検証
3. をクリックした後、ID とキーをそれぞれ config.php ファイルの captcha_id/private_key 変数の値に置き換えます
4.送信ボタン
たとえば、上記のように、ユーザーがログインするときに、ユーザー名、パスワード、確認コードの情報をサーバーに送信します。この時点で、確認を行うことができます:
<?php // 引入文件 require_once dirname(dirname(__FILE__)) . '/lib/class.geetestlib.php'; require_once dirname(dirname(__FILE__)) . '/config/config.php'; session_start(); $GtSdk = new GeetestLib(CAPTCHA_ID, PRIVATE_KEY); // 比如你设置了一个验证码是否验证通过的标识 $code_flag=false; // 这里获取你之前设置的user_id,传送给极验服务器做校验 $user_id = $_SESSION['user_id']; if ($_SESSION['gtserver'] == 1) { $result = $GtSdk->success_validate($_POST['geetest_challenge'], $_POST['geetest_validate'], $_POST['geetest_seccode'], $user_id); if ($result) { // 验证码验证成功 $code_flag=true; } }else{ if ($GtSdk->fail_validate($_POST['geetest_challenge'],$_POST['geetest_validate'],$_POST['geetest_seccode'])) { // 验证码验证成功 $code_flag=true; } } // 如果验证码验证成功,再进行其他校验 if($code_flag){ // 其他验证操作 // 用户名不对时,返回2,其他错误返回3,等等。。。。 }else{ // 验证码验证失败,返回1,这里和上面相呼应,当然我的项目没有简单的返回1,而是返回了JSON数据 echo 1; exit(-1); } ?>
お読みいただきありがとうございます。皆様のお役に立てれば幸いです。このサイトのサポートにご興味をお持ちいただきありがとうございます。
PHP の極端な検証コード例に関する関連記事については、PHP 中国語 Web サイトに注目してください。