mostafaznv/recaptcha

Laravel 包用于 Google Recaptcha v3

1.1.4 2021-02-25 16:12 UTC

This package is auto-updated.

Last update: 2024-09-07 21:13:07 UTC


README

Laravel 包用于 Google Recaptcha v3

Recaptcha 的一些功能

  • 可配置和自定义
  • 回调函数
  • 服务容器
  • 自动发现(仅限 Laravel 5.5+)

要求

  • Laravel 5.3 或更高版本
  • PHP 5.6.4 或更高版本

安装

  1. 使用 composer 安装此包
    composer require mostafaznv/recaptcha
  2. 在 config/app.php 中注册提供者和外观(对于 Laravel 5.3 和 5.4 是必需的)
    'providers' => [
      ...
      Mostafaznv\Recaptcha\RecaptchaServiceProvider::class,
    ],
    
    
    'aliases' => [
      ...
      'Recaptcha' => Mostafaznv\Recaptcha\Facades\Recaptcha::class,
    ]
  3. 发布配置和视图
    php artisan vendor:publish --provider="Mostafaznv\Recaptcha\RecaptchaServiceProvider"
  4. 完成

配置

RECAPTCHA_SITE_KEYRECAPTCHA_SECRET_KEY 添加到 .env 文件中

RECAPTCHA_SITE_KEY=your-site-key
RECAPTCHA_SECRET_KEY=your-secret-key

要设置更多,请打开 config/recaptcha.php 并设置自己的配置。

return [
    'secret_key' => env('RECAPTCHA_SECRET_KEY'),
    'site_key'   => env('RECAPTCHA_SITE_KEY'),

    'is_active' => true,

    'score' => 0.5,

    'options' => [
        'timeout' => 5.0,
    ]
];

用法

  1. 渲染 JS
    {!! Recaptcha::renderJs() !!}
  2. 创建 Recaptcha 字段

    这是一个隐藏的输入字段,它将被 recaptcha 令牌填充。

    {!! Recaptcha::field('login') !!}
  3. 验证
    $validate = Validator::make(Input::all(), [
       'g-recaptcha-response' => 'required|recaptcha:login'
    ]);
  4. 完成

自定义验证消息

将以下值添加到 validation 语言文件中的 custom 数组中

'custom' => [     
    'g-recaptcha-response' => [
        'required' => 'Please verify that you are not a robot.',
        'recaptcha' => 'Captcha error! try again later or contact site admin.',
    ],
],

然后检查表单中的 captcha 错误

@if ($errors->has('g-recaptcha-response'))
    <p>{{ $errors->first('g-recaptcha-response') }}</p>
@endif

手动验证分数

或者,您可以得到分数并采取相应的行动

$token = $request->get('g-recaptcha-response');
$action = 'home';
$score = 0;

$score = app('recaptcha')->verify($token, $action, $score);

if($score > 0.7) {
    // is valid
} 
else if($score > 0.3) {
    // require additional email verification
} 
else {
    return abort(400, 'Bad request');
}

方法

RenderJs

Field

Validation

完整示例

视图
<html>
    <head>
        <title>Recaptcha v3</title>
        
        {!! Recaptcha::renderJs('fa') !!}
    </head>

    <body>
        <form action="{{ url('recaptcha-page') }}" method="post">
            {!! csrf_field() !!}
            {!! Recaptcha::field('home', 'g-recaptcha-response', ['id' => 'recaptcha-id', 'class' => 'form-element'], 'recaptchaCallback') !!}
        
            <button type="submit">Submit</button>
        </form>
        
        @if($errors->any())
            @foreach($errors->all() as $key => $error)
                <p>{{ $key }} - {{ $error }}</p>
            @endforeach
        @endif
        
        
        <script>
            function recaptchaCallback(token) {
                console.log('token retrieved:');
                console.log(token);
            }
        </script>
    </body>
</html>
控制器
class DevController extends Controller
{
    public function verifyRecaptcha(Request $request)
    {
        $this->validate($request, ['g-recaptcha-response' => 'required|recaptcha:home,0.5']);
        dd($request->all());
    }
}

迁移指南

从 1.0.0 到 1.1.0
  • 删除 app/recaptcha.php 文件
  • 删除 resources/views/vendor/recaptcha 目录
  • 再次发布供应商
    php artisan vendor:publish --provider="Mostafaznv\Recaptcha\RecaptchaServiceProvider"

变更日志

有关项目的完整历史记录,请参阅 变更日志

许可

此软件根据 MIT 许可证 (MIT) 发布。

(c) 2018 Mostafaznv,版权所有。