本系列文章为laracasts.com 的系列视频教程——Let's Build A Forum with Laravel and TDD 的学习笔记。若喜欢该系列视频,可去该网站订阅后下载该系列视频,支持正版;

本项目为一个 forum(论坛)项目,与本站的第二本实战教程 《Laravel 教程 - Web 开发实战进阶》 类似,可互相参照。

本节说明

对应视频教程第 89 小节:Recaptcha

本节内容

在之前,我们为了防止恶意程序自动发布话题而建立了关键词检测机制,在本节我们再为新建话题动作引入人机验证机制。我们将利用谷歌提供的 reCAPTCHA 来为我们的应用引入人机验证机制。首先我们需要登录,并注册 reCAPTCHA sites:

注册后,我们根据说明步骤依次进行。首先我们需要增加 reChaptcha 配置:

forum.env

.

.

RECAPTCHA_KEY=6LdpvGEUAAAAAKwswR10hSWgVT1ehMUeQkW50jni

RECAPTCHA_SECRET=6LdpvGEUAAAAALIvpi13rOcothX8L4xBtEQmxyP8

forum\config\services.php

'recaptcha' => [

'secret' => env('RECAPTCHA_SECRET')

]

];

接着我们修改模板,引入script和人机验证区域:

forum\resources\views\threads\create.blade.php

@extends('layouts.app')

@section('header')

@endsection

@section('content')

.

.

Publish

.

.

@endsection

现在我们进入新建话题页面:

然后我们接收前端的数据,后端发送 HTTP 请求进行人机验证。我们利用 Zttp 来发送请求。Zttp 是 Adam Wathan 为了让代码更富表现力以及简化常见用例而写的一个 Guzzle 的封装。我们来安装它:

$ composer require kitetail/zttp

修改控制器代码,增加人机验证:

forum\app\Http\Controllers\ThreadsController.php

.

use Zttp\Zttp;

.

.

public function store(Request $request)

{

$this->validate($request,[

'title' => 'required|spamfree',

'body' => 'required|spamfree',

'channel_id' => 'required|exists:channels,id'

]);

$response = Zttp::asFormParams()->post('https://www.google.com/recaptcha/api/siteverify',[

'secret' => config('services.recaptcha.secret'),

'response' => $request->input('g-recaptcha-response'),

'remoteip' => $_SERVER['REMOTE_ADDR']

]);

if (! $response->json()['success']) {

throw new \Exception('Recaptcha failed');

}

.

.

}

.

.

如果我们不进行人机验证直接发布话题,则会报错:

进行了人机验证之后再发布话题:

php人机验证,89.人机验证(一) |《TDD 构建 Laravel 论坛笔记》| Laravel China 社区...相关推荐

  1. 使用captcha库实现人机验证的图片验证

    安装captcha库 使用go get命令获取captcha库 go get github.com/dchest/captcha 构建响应函数 // 发送图片验证码图片(gee7为自搭建web框架,可 ...

  2. 【Vue3】滑动验证组件 | 滑动验证

    前言 滑块验证不只判断是否滑动到尾部,真正的目的是检测用户行为,检测行为是人为.脚本.还是其它. 防止使用脚本大量注册.请求等 .比如发送请求时,判断用户在某个页面停留了多长时间.登录.注册时是否点击 ...

  3. sencha touch Model validations 自定义验证 二选一输入验证、重复验证、时间验证、比较验证、条件验证(2015-1-14)...

    项目初始化时执行以下代码 1 //重写模型,方便进行自定义验证 2 Ext.define("Ext.zh.data.Model", { 3 override: "Ext. ...

  4. 9、 Struts2验证(声明式验证、自定义验证器)

    1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法.有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证: ...

  5. R语言构建xgboost文本分类模型(bag of words):xgb.cv函数交叉验证确定xgboost模型的最优子树个数、交叉验证获取最优子树之后构建最优xgboost模型并评估模型文本分类效能

    R语言构建xgboost文本分类模型(bag of words):xgb.cv函数交叉验证确定xgboost模型的最优子树个数.交叉验证获取最优子树之后构建最优xgboost模型并评估模型文本分类效能 ...

  6. R语言构建xgboost模型:xgb.cv函数交叉验证确定模型的最优子树个数(可视化交叉验证对数损失函数与xgboost模型子树个数的关系)、交叉验证获取最优子树之后构建最优xgboost模型

    R语言构建xgboost模型:xgb.cv函数交叉验证确定模型的最优子树个数(可视化交叉验证对数损失函数与xgboost模型子树个数的关系).交叉验证获取最优子树之后构建最优xgboost模型 目录

  7. 计算机系统验证课件,回顾性验证及再验证简介(ppt 42页)

    回顾性验证及再验证简介目录: 一. 验证-生命周期 二. 验证的方法及适用条件 三. 验证状态的维持-生命周期法 四. 变更控制 五. 变更控制 六. 回顾性验证 七. 再验证 八. 工艺用水 九.  ...

  8. MVC验证05-自定义验证规则、验证2个属性值不等

    本文体验2个属性值不等.即当一个属性输入值,另外一个属性输入的值不能和第一个属性值相等.相关文章包括: MVC验证01-基础.远程验证   MVC验证02-自定义验证规则.邮件验证   MVC验证03 ...

  9. EasyUI表单验证,自定义插件验证,自定义js插件验证,远程验证,常见手机号,中英文,qq等验证规则验证...

     { field : 'startPort', title : "起始端口", editor: "text", width : 50, editor: { ...

最新文章

  1. servlet-------------jsp 地址栏变化
  2. Vscode配置C语言问题
  3. SpringMVC简单项目配置
  4. 阶乘的精确值大数阶乘
  5. MONGODB 权限认证
  6. SAP ABAP SICF事务码和SAP Hybris的链式过滤器filter chain
  7. 以太网 数据包速率计算方法
  8. 管理工作中的50点感悟
  9. zookeeper和Kafka的关系
  10. SpringMVC常用的注解
  11. 从曾经的无比辉煌,到如今彻底凉凉,万能充到底经历了什么?
  12. SOA的十大技术理论体系
  13. mac上c++11的编译问题
  14. python怎么恢复默认窗口,如何恢复python编程环境spyder的窗口
  15. 冗余网络构建方案对比:VRRP协议、多网卡绑定及WN202冗余链路网卡
  16. apdu 移动sim_SIM之APDU指令格式 | 学步园
  17. html中复选框只能选一个,HTML选择三个不同的复选框并显示它们
  18. youtube-dl 环境搭建 使用
  19. micropython大小_Micropython进阶 | 如何用单片机制作鞋码匹配仪
  20. 决策树(二)——决策树的生成

热门文章

  1. 海康威视监控下载下来的mp4格式的视频,小类别MPEG-PS格式
  2. Nacos注册中心和服务消费方式
  3. [RK3288][Android6.0] 调试笔记 --- 设置中文为默认输入法
  4. Android涂鸦简单制作
  5. 加拿大首个以女性名字命名的工程学院:商界领袖Gina Cody向蒙特利尔康考迪亚大学捐赠1500万加元,创造历史
  6. EfficientNetV2网络详解
  7. windows许可证即将过期 win10的解决办法
  8. 微信公众号平台登陆-你已授权登陆过XXXX
  9. python爬虫爬取知乎图片,轻松解决头像荒
  10. WiFi大师终极版4.1.8独立源码