>  기사  >  PHP 프레임워크  >  ThinkPHP5의 geetest 슬라이딩 인증 코드 기능 구현에 대한 자세한 설명

ThinkPHP5의 geetest 슬라이딩 인증 코드 기능 구현에 대한 자세한 설명

藏色散人
藏色散人앞으로
2021-04-01 17:22:363472검색

다음 튜토리얼 칼럼인 thinkphp에서는 ThinkPHP5의 geetest 슬라이딩 인증 코드 기능 구현에 대해 자세히 설명하겠습니다. 필요한 친구들에게 도움이 되길 바랍니다!

ThinkPHP5는 geetest 슬라이딩 인증 코드 기능을 구현합니다

이제 Taobao, JD.com 등과 같은 많은 웹사이트가 geetest 슬라이딩 인증 코드를 사용하여 로그인하는 방식으로 전환했습니다. 이 방법은 기존 인증보다 낫습니다. 코드 방식을 경험하고 사용자 입력 오류를 줄이고 도난 방지 기능도 수행합니다. 요즘에는 최고의 테스트 중 다수가 제3자에 의해 제공되며, 그 중 다수는 유료입니다. 여기에서는 thinkphp 통합 시리즈의 궁극적인 슬라이딩 인증 코드인 geetest를 주로 소개합니다. 공식 웹사이트: http://www.geetest.com

자세한 내용은 다음과 같습니다.

1: 등록하여 key

등록하고 키를 얻습니다.

ThinkPHP5의 geetest 슬라이딩 인증 코드 기능 구현에 대한 자세한 설명

둘: sdk

/ThinkPHP/Library/Org/Xb/GeetestLip.class.php(여기서 GeetestLip.class.php는 제가 이름을 바꾼 geetest 클래스 파일입니다.) , 원래 이름은 class.geetestlib.php)

ThinkPHP5의 geetest 슬라이딩 인증 코드 기능 구현에 대한 자세한 설명

Thinkphp에서는 타사 클래스를 Org/Util/Xb 아래에 배치하고 다음과 같이 클래스 파일에 네임스페이스를 추가했습니다. 파일

ThinkPHP5의 geetest 슬라이딩 인증 코드 기능 구현에 대한 자세한 설명

3개: 검증 스타일 생성

admin/view/public/cdtsh_log_smfyws.php

nbsp;html>


  <meta>
  <title>网站管理系统后台</title>
  <script></script>
  <link>
  <script></script>
  <script></script>
  <link>
  <script>
    $(document).ready(function(){
      var verifyimg = $(".verifyimg").attr("src");
      $(".reloadverify").click(function(){
        if( verifyimg.indexOf(&#39;?&#39;)>0){
          $(".verifyimg").attr("src", verifyimg+&#39;&random=&#39;+Math.random());
        }else{
          $(".verifyimg").attr("src", verifyimg.replace(/\?.*$/,&#39;&#39;)+&#39;?&#39;+Math.random());
        }
      });
    });
  </script>


<p>
  </p><h1><a>后台管理中心</a></h1>
  
    

      

            
  •                               
  •         
  •                               
  •         
  •                      

      ThinkPHP5의 geetest 슬라이딩 인증 코드 기능 구현에 대한 자세한 설명 

                       
  •       
      
                                    

          
              
<script></script> <script> var handler = function (captchaObj) { // 将验证码加到id为captcha的元素里 captchaObj.appendTo("#captcha"); }; // 获取验证码 $.get("{:U(&#39;Admin/Public/verifys&#39;)}", function(data) { // 使用initGeetest接口 // 参数1:配置参数,与创建Geetest实例时接受的参数一致 // 参数2:回调,回调的第一个参数验证码对象,之后可以使用它做appendTo之类的事件 initGeetest({ gt: data.gt, challenge: data.challenge, product: "float", // 产品形式 offline: !data.success, new_captcha:&#39;true&#39;, width:&#39;260px&#39;, }, handler); },&#39;json&#39;); </script>

4개: 검증 기능

/Application/Common/Common /function.php

/**
 * geetest检测验证码
 */
function geetest_chcek_verify($data){
  $geetest_id = "7149e2021d7938157e";
  $geetest_key = "62b92039e1e9cf9455";
  $geetest=new \Org\Util\Xb\GeetestLib($geetest_id,$geetest_key);
  $user_id=$_SESSION['geetest']['user_id'];
  $ip_address=$_SESSION['geetest']['ip_address'];
  $dataa = array(
    "user_id" => $user_id, # 网站用户id
    "client_type" => "web", #web:电脑上的浏览器;h5:手机上的浏览器,包括移动应用内完全内置的web_view;native:通过原生SDK植入APP应用的方式
    "ip_address" => $ip_address, # 请在此处传输用户请求验证时所携带的IP
  );
  if ($_SESSION['geetest']['gtserver']==1){
    $result=$geetest->success_validate($data['geetest_challenge'], $data['geetest_validate'], $data['geetest_seccode'], $dataa);
    //return $result;
    if ($result) {
      //return 11;
      return true;
    } else{
      //return 22;
      return false;
    }
  }else{
    if ($geetest->fail_validate($data['geetest_challenge'],$data['geetest_validate'],$data['geetest_seccode'])) {
      //return 33;
      return true;  
    }else{
      //return 44;
      return false;
    }
  }
}
//获取id地址
function GetIP() {
  if (!empty($_SERVER["HTTP_CLIENT_IP"])) {
    $cip = $_SERVER["HTTP_CLIENT_IP"];
  } elseif (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) {
    $cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
  } elseif (!empty($_SERVER["REMOTE_ADDR"])) {
    $cip = $_SERVER["REMOTE_ADDR"];
  } else {
    $cip = "无法获取!";
  }
  return $cip;
}

five :php는 인증 코드를 생성하고

//极速验证
  public function verifys(){
    //require_once dirname(dirname(dirname(__FILE__))) . '/lib/class.geetestlib.php';
    //require_once dirname(dirname(__FILE__)) . '/config/config.php';
    // $GtSdk = new GeetestLib(CAPTCHA_ID, PRIVATE_KEY);
    $geetest_id = "7149e2021d7938157e9";
    $geetest_key = "62b92039e1e9cf";
    $geetest=new \Org\Util\Xb\GeetestLib($geetest_id,$geetest_key);
    //dump($geetest);die;
    $user_id = "test";
    $data = array(
      "user_id" => $user_id, # 网站用户id
      "client_type" => "web", #web:电脑上的浏览器;h5:手机上的浏览器,包括移动应用内完全内置的web_view;native:通过原生SDK植入APP应用的方式
      "ip_address" => GetIP(), # 请在此处传输用户请求验证时所携带的IP
    );
    $status = $geetest->pre_process($data,1);
    //dump($status);
    $_SESSION['geetest']=array(
      'gtserver'=>$status,
      'user_id'=>$user_id,
      'ip_address'=>GetIP(),
      );
    echo $geetest->get_response_str();
  }
 public function cdtsh_log_smfyws() {
    if ($_SESSION['userid']) {
      $this->redirect('Admin/Index/Index');
    } else {
      if (IS_POST) {
        $username = $_POST['username'];
        $password = $_POST['password'];
        //$geetest_challenge = $_POST['geetest_challenge'];
        //$geetest_validate = $_POST['geetest_validate'];
        //$geetest_seccode = $_POST['geetest_seccode'];
        $data=I('post.');
        if($data['geetest_challenge']=="" || $data['geetest_validate']=="" ||$data['geetest_seccode']=="" ){
          $this->error('请进行图形验证');
        }else{
          //dump(geetest_chcek_verify($data));
          if (geetest_chcek_verify($data)){
            //echo '验证成功';
            if ($this->loginAdmin($username, $password)) {
              $data = M("User")->where("username='".$username."' and password='".md5($password)."'")->find();
              if ($data["status"] != 1) {
                //判断是否禁用
                $this->recordLoginAdmin($_POST['username'], $_POST['password'], 0, "账号禁用"); //记录登录日志
                $this->error('该帐号禁用');
              } else {
                $save["lastlogin_time"] = time();
                $save["lastlogin_ip"] = get_client_ip();
                $save["login_num"] = $data["login_num"] + 1;
                $status = M("user")->where(array("id" => $data['id']))->save($save);
                $_SESSION['userid'] = $data['id'];
                $_SESSION['user'] = $data['username'];
                $_SESSION['rid'] = $data['a_Id'];
                $this->recordLoginAdmin($_POST['username'], $_POST['password'], 1); //记录登录日志
                $this->redirect('Admin/Index/Index');
                //$this->success('登录成功',U('Admin/Index/Index'));
              }
            } else {
              $this->recordLoginAdmin($_POST['username'], $_POST['password'], 0, "账号密码错误"); //记录登录日志
              $this->error('登录失败');
            }
          }else{
            //echo '图形验证失败';
            $this->error('图形验证失败');
          }
        }
      } else {
        $this->display();
      }
    }
  }

를 확인합니다. 렌더링은 다음과 같습니다.

로그인 페이지

ThinkPHP5의 geetest 슬라이딩 인증 코드 기능 구현에 대한 자세한 설명

확인을 클릭한 후

ThinkPHP5의 geetest 슬라이딩 인증 코드 기능 구현에 대한 자세한 설명

위 내용은 ThinkPHP5의 geetest 슬라이딩 인증 코드 기능 구현에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제