thashendran/laravel-recaptcha

轻松将 reCAPTCHA 添加到您的 Laravel 项目中

dev-main 2024-04-19 15:20 UTC

This package is not auto-updated.

Last update: 2024-09-21 16:03:13 UTC


README

Build Status

此包允许您轻松地将 reCAPTCHA 添加到您的 Laravel 项目中。

安装

使用 composer 安装

composer require arjasco/laravel-recaptcha

如果您的 Laravel 版本不支持自动发现,请将服务提供者添加到您的 app.php 配置文件中。

'providers' => [
    ...
    Arjasco\LaravelRecpatcha\RecaptchaServiceProvider::class,
],

将配置文件发布到您的项目中。

php artisan vendor:publish --provider="Arjasco\LaravelRecaptcha\RecaptchaServiceProvider"

将您的网站密钥和密钥添加到 recaptcha.php

 return [
     'sitekey' => env('RECAPTCHA_SITEKEY'),
     'secret' => env('RECAPTCHA_SECRET')
 ]

使用方法

表单嵌入

使用辅助函数 recaptcha() 将 HTML 嵌入到您的表单中。

<form action="/contact" method="POST">
    <input type="text" name="full_name" value=""/>
    <input type="text" name="email" value=""/>
    <textarea type="text" name="message"></textarea>
    <button>Send</button>
    {!! recaptcha() !!}
</form>

或者,如果您正在使用 Blade,可以使用 @recaptcha 指令

<form action="/contact" method="POST">
    ...
    @recaptcha
</form>

您也可以向函数传递许多选项以进一步自定义嵌入。

<form action="/contact" method="POST">
    ...
    {!! recaptcha(['theme' => 'dark', 'size' => 'compact']) !!}
    <!-- Or using the blade directive.. -->
    @recaptcha(['theme' => 'dark', 'size' => 'compact'])
</form>

有关更多选项的表格,请参阅这里。在选项数组中使用时,省略每个选项的 data- 部分。

验证

recaptcha 规则添加到您要验证的请求的验证器上。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ContactController extends Controller
{
    public function send(Request $request)
    {
        $this->validate($request, [
            'g-recaptcha-response' => 'recaptcha'
        ]);
    }
}

错误

验证过程中产生的任何错误都将添加到 recaptcha 键。例如,如果您只想获取第一个错误,您可能需要进行如下操作:

<div class="form__errors>
    {!! $errors->first('recaptcha', '<span>:message</span>'); !!}
</div>

自动脚本注入

如果您想自动将脚本注入到您的 HTML head 标签中,只需将中间件添加到任何 GET 路由,这是可选的,您可能希望自己包含脚本。

在您的 Kernel.php 文件中注册中间件。

<?php

 /**
  * The application's route middleware.
  *
  * These middleware may be assigned to groups or used individually.
  *
  * @var array
  */
 protected $routeMiddleware = [
     ...
     'recaptcha' => \Arjasco\LaravelRecaptcha\RecaptchaMiddleware::class,
 ];

在您的 GET 路由上使用中间件。

Route::get('/contact', 'ContactController@index')->middleware('recaptcha');