如何将Geetest验证码与Laravel集成
Geetest集成流程
- 实现通用登录逻辑
- 注册Geetest账号
- 注册后台“Geetest”消息行为验证
- 根据官方Demo驱动和路由
- 根据官方Demo配置我们的登录模板
- 测试详细的集成过程
Geetest
1。实现通用登录逻辑
制作控制器 php artisan make:controller GeetestController
编辑controller/app/Http/Controllers/GeetestController
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; /** * 这是一个集成 Geetest 验证码的 Demo 类 */ class GeetestController extends Controller { /** * 导入登录视图 */ public function login() { return view('Geetest/login'); } /** * 验证用户信息 */ public function check() { return '用户已经在前端通过了验证码验证, 你可以在这里完善后续的逻辑'; } }
显示简单,省略。
2。跳过=>“注册”
3。跳过=>“后台登录”=>“行为验证”=>索要ID和密钥
4。控制器和路由配置
首先,Demo提供的基类库是一个名为GeetestLib的类文件。我们创建一个同名的控制器来替换它 php artisan make:controller GeetestLib
不要复制类,只需复制类中的内容
GeetestController控制器实现逻辑
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Controllers\GeetestLib; // 我们创建然后拷贝得来的 GeetestLib 核心库 /** * 这是一个集成 Geetest 验证码的 Demo 类 */ class GeetestController extends Controller { // 这里配置 id & key private $captchaId = "5d467a3cb22a9310837d51720c5251f0"; private $privateKey = "40764e6b94344f780d4b6b07148c9495"; /** * 导入登录视图 */ public function login() { return view('Geetest/login'); } /** * 验证用户信息 */ public function check() { return '用户已经在前端通过了验证码验证, 你可以在这里完善后续的逻辑'; } /** * 实现验证功能: 直接复制官方demo提供得 */ public function startCaptchaServlet() { // 这里使用配置的 id & key $GtSdk = new GeetestLib($this->captchaId, $this->privateKey); session_start(); $data = array( "user_id" => "test", # 网站用户id "client_type" => "web", #web:电脑上的浏览器;h5:手机上的浏览器,包括移动应用内完全内置的web_view;native:通过原生SDK植入APP应用的方式 "ip_address" => "" # 请在此处传输用户请求验证时所携带的IP ); $status = $GtSdk->pre_process($data, 1); $_SESSION['gtserver'] = $status; $_SESSION['user_id'] = $data['user_id']; echo $GtSdk->get_response_str(); } }
配置路由/routes/
// 集成 Geetest 验证码 Route::get('GeetestLogin', 'GeetestController@login'); //登录页面 Route::get('GeetestCheck', 'GeetestController@check'); //登录验证 (我们没写具体逻辑) Route::get('GeetestStartCaptchaServlet', 'GeetestController@startCaptchaServlet'); // 调用方法启用验证码
5。完善登录模板/resources/views/Geetest/
需要导入jquery(我们使用npm run dev来编译集成jquery)
需要导入给定的demo,我们将其放在public/js下
其实理论上可以放在 /resouces/assets/js/ 下,需要在 /resouces/assets/js/ 中直接参与编译,在 public/js 中进行包集成生效。
需要在模板上定义两个样式类。 show & .hide => 用于控制提示信息的样式也可以写在 /resouces/assets/sass/
使用“登录”按钮的 ID 提交表单
复制提供的前端示例中的js逻辑注意绑定这个按钮
请注意.ajax配置URL必须是我们在'GeetestStartCaptchaServlet'中定义的路径
具体代码
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale="> <!-- 这是我们用 npm run dev 编译后的 css / js --> <link rel="stylesheet" href="/css/" rel="external nofollow" > <script ></script> <!-- 这里需要用到两个样式 --> <style> .show { display: block; } .hide { display: none; } </style> <title> Geetest 集成 Demo</title> </head> <body> <div class="container"> <div class="row"> <div class="col-lg-12"> <h1 class="text-center">Geetest 集成 Demo <small> <a href="" rel="external nofollow" rel="external nofollow" > Geetest 官方网站 </a> </small> </h1> </div> <div class="col-lg-12"> <form method="GET" action="/GeetestCheck"> <div class="form-group"> <label for="exampleInputEmail1">模拟邮箱地址</label> <input type="email" class="form-control" aria-describedby="emailHelp" placeholder="请输入邮箱..."> <small class="form-text text-muted">我们不会公开您的邮箱</small> </div> <div class="form-group"> <label for="exampleInputPassword1">模拟密码</label> <input type="password" class="form-control" placeholder="请输入密码..."> </div> <div class="form-group"> <div></div> <p class="show">正在加载验证码......</p> <p class="hide">请先完成验证</p> </div> <!-- 这里需要绑定一个按钮 --> <button type="submit" class="btn btn-primary">登录</button> </form> </div> </div> </div> <!-- 引用 --> <script ></script> <!-- 直接复制官方Demo里的js代码 --> <script> var handlerEmbed = function (captchaObj) { $("#embed-submit").click(function (e) { var validate = (); if (!validate) { $("#notice")[0].className = "show"; setTimeout(function () { $("#notice")[0].className = "hide"; }, 2000); (); } }); // 将验证码加到id为captcha的元素里,同时会有三个input的值:geetest_challenge, geetest_validate, geetest_seccode captchaObj.appendTo("#embed-captcha"); (function () { $("#wait")[0].className = "hide"; }); // 更多接口参考:install/sections/idx-client-sdk.html }; $.ajax({ // 获取id,challenge,success(是否启用failback) url: "/GeetestStartCaptchaServlet", // 加随机数防止缓存 type: "get", dataType: "json", success: function (data) { (data); // 使用initGeetest接口 // 参数1:配置参数 // 参数2:回调,回调的第一个参数验证码对象,之后可以使用它做appendTo之类的事件 initGeetest({ gt: data.gt, challenge: data.challenge, new_captcha: data.new_captcha, product: "embed", // 产品形式,包括:float,embed,popup。注意只对PC版验证码有效 offline: !data.success // 表示用户后台检测极验服务器是否宕机,一般不需要关注 // 更多配置参数请参见:install/sections/idx-client-sdk.html#config }, handlerEmbed); } }); </script> </body> </html>
测试成功
优化
就是最好不要使用“控制器”作为库的初级类。 GeetestLib应该集成在另一个地方
视图模板中的Js和CSS要写在resources/assets中参与生成和编译
我们没有写具体的登录逻辑。您还应该能够在登录验证的 check() 方法中重新确认 Geetest 验证是否成功。您可以转向演示
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。