版权声明:本文为博主原创文章,未经博主允许不得转载。个人博客:www.saoguang.top https://blog.csdn.net/u011580175/article/details/82152248
我的个人博客:https://www.saoguang.top/
一、人机验证
- 人机验证:简单的说就是,能够阻止机器通过,只允许人通过的验证。
- 常见的人机验证:验证码(有静态的和GIF动画的),谷歌的recaptcha人机验证(很难做到破解)。
二、极验Geetest
三、Geetest在Laravel使用
- Geetest在Laravel上的使用非常的简单方便。因为已经被集成制作为Laravel扩展。
- 用到的扩展是:germey/geetest
- Github : https://github.com/Germey/LaravelGeetest
- 支持Laravel版本:Laravel 5 或者 更新的版本
注册Geetest账号,并创建应用,获取APPID和APPKEY
- 这是第三方API使用常常需要的步骤。
- 进入Geetest官网,注册,登陆,创建应用(不用填什么域名,直接全部填写应用的名称就可以了)
- 获取到ID和KEY
安装Geetest扩展到Laravel 5项目
个人推荐:使用第一种安装方式(因为,第二种安装方式运行composer.json会更新你的所有扩展,会很慢)
1. 安装扩展
1. 简单的可以通过直接使用Composer命令进行安装。(没有Composer自行安装)
- $ composer require germey/geetest
2. 或者选择通过配置composer.json文件
- 将"germey/geetest": "~3.0"
添加到"require"
键中。
- 运行$ composer update
2. 添加扩展
1. 添加Germey\Geetest\GeetestServiceProvider::class
到config/app.php文件的providers键中。
2. 你还可以注册Geetest Facade在config/app.php文件的aliases中
- 添加'Geetest' => Germey\Geetest\Geetest::class
至config/app.php的aliases中
配置Geetest
- 运行命令
$ php artisan vendor:publish --tag=geetest
以创建与扩展有关的配置文件config/geetest.php - 在.env配置文件中,添加(替换成你的)以下条目。
GEETEST_ID=5c8725147***********bbf5cb48f740
GEETEST_KEY=780fb30*****************9f88bbf2
Geetest使用方法
- 直接在视图中调用 Geetest的render()方法,就能够创建出,Geetest验证。
{!! Geetest::render() !!}
- 效果图:
- 你还可以通过给render()传参,改变样式(默认是popup样式)
{!! Geetest::render('float') !!}
{!! Geetest::render('bind') !!}
{!! Geetest::render('popup') !!}
{!! Geetest::render('custom') !!}
Geetest后端验证编写
- 由于前端只是提供人机验证,如果验证成功的话,会通过form传给后端三个键值对,这三个键值对就可以提供给后端判断人机验证结果。
- 需要注意的是:这三个键值对是一次性的,后端验证通过之后,第二次将失效。
- 后端验证代码及其简单,直接通过Laravel表单验证的geetest验证字段,对geetest_challenge进行验证,验证失败的提示语句可以直接在config/geetest.php配置文件中的client_fail_alert字段修改(默认提示:请正确完成验证码操作)。
$this->validate($request, [
'geetest_challenge' => 'geetest',
], [
'geetest' => config('geetest.server_fail_alert')
]);
将会出现的问题以及解决方式
- 在本地测试的时候,为了开发方便,我的apache配置的是一个根目录,然后其他的项目全部放在根目录下,所以url变成了这样,
http://localhost/SME_Service_Station/public/
,但是Geetest获取验证参数的时候,Ajax请求的时候,访问的是http://localhost/geetest
这个url,所以会一直显示验证加载中。所以,需要到config/geetest.php配置文件中,修改url的值。
- 测试的时候往往都是http协议,但是上线之后,可能使用的是https协议,所以,需要到config/geetest.php配置文件中修改protocol属性