laravel使用谷歌的reCAPTCHA验证码系统google/recaptcha教程

写在开篇前
  • reCAPTCHA是Google拥有的人工验证系统。
  • reCAPTCHA目前下载量是12 105 196,php开发网站验证码使用量第一的位置,作为行为验证,免费开源无疑是最大的亮点
  • 但是国内一般使用不了。但是本教程已解决此问题
  • 本教程基于laravel5.8 完成的开发和使用,php版本为7.0,具体环境要求参考

  • 需要理性上网,具体教程参考
开始
  • 组件安装:

composer require google/recaptcha

image

  • 进入注册网站的页面,这里你可以选择第3版或者第2版,不同在于v2是让你校验图形通过,v3不需要校验图形,而是记录用户的行为,根据用户行为给出用户行为得分。这里先讲v2

image

  • 注册完毕,保存下来网站密钥(用于前端页面)和密钥(用于后台校验)

image

  • 网站整合

    • 添加路由
site/routes/web.php
    //前端路由
Route::group(['prefix' => 'front'], function ($router) {
    Route::get('captcha', "Front\SourceController@captcha");//发送谷歌验证
    Route::get('checkCaptcha', "Front\SourceController@checkCaptcha");//发送谷歌验证
});

site/app/Http/Controllers/Front/SourceController.php
//控制器代码
    /**
     * Notes:测试谷歌验证码
     * Created by PhpStorm.
     * User: guofu
     * Date: 2020/5/14
     * Time: 下午5:06
     */
    public function captcha(Request $request)
    {
        return view('front/captcha');

    }
    
    site/resources/views/front/captcha.blade.php
    //前台页面代码



    google验证码V2
    


{{--注意此处的js换成国内地址--}}

image

  • 后台验证逻辑
    /**
     * Notes:检查验证码
     * Created by PhpStorm.
     * User: guofu
     * Date: 2020/5/18
     * Time: 上午11:29
     * @param Request $request
     */
    public function checkCaptcha(Request $request)
    {
        $url='https://www.recaptcha.net/recaptcha/api/siteverify';//国内的js
        $code=$request->get("code");
        $data=[
            'secret' =>'你的密钥,注意:和网站密钥不一样' ,
            'response' => $code,
        ];
        $query = http_build_query($data);

        $options['http'] = array(
            'timeout'=>60,
            'method' => 'POST',
            'header' => 'Content-type:application/x-www-form-urlencoded',
            'content' => $query
        );

        $context = stream_context_create($options);
        $result = file_get_contents($url, false, $context);
        echo $result;
    }
  • 返回结果如下(true代表验证成功):
{
  "success": true,
  "challenge_ts": "2020-05-19T08:21:06Z",
  "hostname": "www.imitao1.tech"
}

# 附相关错误码
Error code  Description
missing-input-secret    The secret parameter is missing.
invalid-input-secret    The secret parameter is invalid or malformed.
missing-input-response  The response parameter is missing.
invalid-input-response  The response parameter is invalid or malformed.
bad-request The request is invalid or malformed.
timeout-or-duplicate    The response is no longer valid: either is too old or has been used previously.
  • v2验证完毕,在后台的校验参数里面也可以加入请求ip,请求方式一样,相关参数说明
POST Parameter  Description
secret  Required. The shared key between your site and reCAPTCHA.
response    Required. The user response token provided by the reCAPTCHA client-side integration on your site.
remoteip    Optional. The user's IP address
v3版本的使用,这里只改一下html页面,其他是一样的,但是v3的网站密钥和密钥记得换掉,v3/v2都是独立的密钥



    
    
    
    Document

    







 




  • 页面展示,只在页面右下角有一个标识,不需要手动验证图片,后台会根据用户行为给出得分

image

  • 点击验证,查看返回值如下
{
  "success": true,
  "challenge_ts": "2020-05-19T08:35:22Z",
  "hostname": "www.imitao1.tech",
  "score": 0.9,
  "action": "homepage"
}
  • 你根据返回的score的值作为参考该请求是否是非法请求。如 score<0.5;return false;
相关文章参考

google/recaptcha组件下载地址
google/recaptcha平台注册相关网站
如何实现理性上网

你可能感兴趣的:(php,laravel,验证码)