Lajur tutorial Laravel akan memperkenalkan cara menggunakan laravel-gridCaptcha untuk menjana kod pengesahan yang serupa dengan imej klik Google secara setempat. Saya harap ia akan membantu semua orang.
[Syor Lanjutan] Gunakan laravel-gridCaptcha untuk menjana kod pengesahan secara setempat yang serupa dengan imej titik Google
Pengenalan
laravel-gridCaptcha
menjana sambungan kecil yang serupa dengan kod pengesahan imej klik Google, kerana kebanyakan kod pengesahan dijana oleh PHP sekarang adalah Mudah untuk pelakon yang berniat jahat untuk mengenal pasti, dan set sambungan kecil ini sangat mudah, tetapi memerlukan pembelajaran mesin yang mendalam untuk robot Kos serangan pelakon yang berniat jahat juga meningkat, tetapi set sambungan kecil ini berbeza daripada kod pengesahan Google. , yang memerlukan mesin Untuk belajar, anda hanya perlu mengkonfigurasi fail yang sepadan secara setempat. Oleh kerana imej kod pengesahan yang dijana dijana dengan membaca fail, adalah disyorkan untuk menggunakan Redis untuk caching Kod menggunakan caching secara lalai.
ps: 如有不足之处,欢迎大佬提出修改意见。
Github: https://github.com/deleteDB/laravel-captcha-grid
Packagist: https://packagist.org/packages/deletedb/laravel-captcha- grid
Pratonton
Pasang
Menyokong Laravel 8 dan ke atas:
composer require deletedb/laravel-captcha-grid
Penerangan item konfigurasi
php artisan vendor:publish --provider="Deletedb\Laravel\Providers\LaravelServiceProvider"
config/gridcaptcha.php
return [ //生成验证码图片配置 'image' => [ //验证码图片路径 'path' => env('GRID_CAPTCHA_IMAGE_PATH', storage_path('gridcaptcha\image')), //从验证码图片路径中获取的文件后缀名 'suffix' => env('GRID_CAPTCHA_IMAGE_SUFFIX', 'jpg'), //生成验证码质量 'quality' => env('GRID_CAPTCHA_IMAGE_QUALITY', 70), //生产验证码宽 'wide' => env('GRID_CAPTCHA_IMAGE_WIDE', 300), //生产验证码高 'high' => env('GRID_CAPTCHA_IMAGE_HIGH', 300), ], //验证码配置 'captcha' => [ //生成的验证码过期时间 单位秒 'validity' => env('GRID_CAPTCHA_IMAGE_VALIDITY', 180), //验证码缓存的key 'cache_key' => env('GRID_CAPTCHA_IMAGE_CACHE_KEY', 'grid_captcha'), //验证码生成的key长度 'key_length' => env('GRID_CAPTCHA_IMAGE_KEY_LENGTH', 64), //自定义效验验证码key字段 'key_string' => env('GRID_CAPTCHA_IMAGE_KEY_STRING', 'captcha_key'), //自定义效验验证码code字段 'code_string' => env('GRID_CAPTCHA_IMAGE_CODE_STRING', 'captcha_code'), ],];
Gunakan
untuk menjana kod pengesahan
<?php namespace App\Http\Controllers;class TestController extends Controller{ /** * 辅助函数生成验证码 * @return array */ public function helpers() { return grid_captcha([ 'mobile' => '100xxxxx121' ]); } /** * 门面方式生成验证码 * @return array */ public function facade() { return \Deletedb\Laravel\Facades\GridCaptcha::get([ 'mobile' => '100xxxxx121' ]); } /** * 对象方式生成验证码 * @return array */ public function object() { $captcha = new \Deletedb\Laravel\GridCaptcha(); return $captcha->get([ 'mobile' => '100xxxxx121' ]); }}
- 生成结果```json5{ "hint": "猴子",//提示文本 "captcha_key": "Qh8kHYF4C....",//验证码key "image": "data:image/jpeg;base64,/9j/...."//base64验证码图片 -- 前端渲染显示}
<!-- 生成的是一个九宫格图片,前端需要渲染图片,并且生成九个div用于记录用户点击的宫格位置,宫格位置从 0 开始,当点击到四位的时候返回给后端进行效验 ,因为前端技术拙劣我就不放例子了欢迎大佬补充。 大概思路: --> <div> <!-- img 显示的是返回的验证码图片--> <img alt="laravel melaksanakan kod pengesahan imej klik Google [disyorkan]" > <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> </div>
Kesan:
<?php namespace App\Http\Controllers;use Illuminate\Http\Request;class TestController extends Controller{ /** * 辅助函数方式效验 * @param Request $request * @return array|false|\Illuminate\Http\JsonResponse */ public function helpersCheck(Request $request) { /** * 传参效验 */ if ($captcha_data = grid_captcha()->check('Qh8kHYF4C....', '1540') === false) { return response()->json(['message' => '验证码错误', 'code' => 401]); } /** * 传递 Request 对象效验 */ if ($captcha_data = grid_captcha()->checkRequest($request)) { return response()->json(['message' => '验证码错误', 'code' => 401]); } return $captcha_data; } /** * 门面方式效验 * @param Request $request * @return array|false|\Illuminate\Http\JsonResponse */ public function facadeCheck(Request $request) { /** * 传参效验 */ if ($captcha_data = \Deletedb\Laravel\Facades\GridCaptcha::check('Qh8kHYF4C....', '1540') === false) { return response()->json(['message' => '验证码错误', 'code' => 401]); } /** * 传递 Request 对象效验 */ if ($captcha_data = \Deletedb\Laravel\Facades\GridCaptcha::checkRequest($request)) { return response()->json(['message' => '验证码错误', 'code' => 401]); } return $captcha_data; } /** * 对象方式效验 * @param Request $request * @return array|false|\Illuminate\Http\JsonResponse */ public function objectCheck(Request $request) { $captcha = new \Deletedb\Laravel\GridCaptcha(); /** * 传参效验 */ if ($captcha_data = $captcha->check('Qh8kHYF4C....', '1540') === false) { return response()->json(['message' => '验证码错误', 'code' => 401]); } /** * 传递 Request 对象效验 */ if ($captcha_data = $captcha->checkRequest($request)) { return response()->json(['message' => '验证码错误', 'code' => 401]); } return $captcha_data; }} //效验完成正确后 您可以进行业务逻辑处理,比如可以获取到上方设置在验证码中的数据 如:上方设置的是手机号,您这里可以获取验证码中的手机号,当效验成功发送短信验证码等...
Kembali jika pengesahan berjaya: Data yang anda lalui semasa menjana pengesahan dikembalikan dan tatasusunan kosong dikembalikan secara lalai
Kembali jika pengesahan gagal: palsu
{ "mobile" : "100xxxxx121"}
Petua penyetempatan
resources/lang/zh_CN/grid-captcha.php
<?php
//一个图片目录对应一个提示 return [ 'banmaxian' => '斑马线', 'gongjiaoche' => '公交车', 'heiban' => '黑板', 'honglvdeng' => '红绿灯', 'hongzao' => '红枣', 'houzi' => '猴子', 'qianbi' => '铅笔', 'shutiao' => '薯条', 'xiaofangshuan' => '消防栓', 'zhenglong' => '蒸笼',];
Tambah imej kod pengesahan
Contoh: Tambah jenis baharu Untuk imej jenis kod pengesahan pingguo
, anda perlu mencipta direktori bernama image.path
di bawah direktori pingguo
dalam fail konfigurasi dan simpan jenis fail imej yang berkaitan dalam direktori pingguo
. Untuk menambah jenis baharu, anda mesti mempunyai sekurang-kurangnya Empat jenis gambar berkaitan, tiada had pada nama fail, selagi nama akhiran fail dinyatakan dalam fail konfigurasi, ia boleh seperti berikut:
─storage └─gridcaptcha └─image ├─pingguo │ 1.jpg │ 10.jpg │ 11.jpg │ 12.jpg │ 13.jpg
"
Oleh kerana membaca fail ialah operasi yang menggunakan I/O untuk caching, saya syorkan menggunakan Redis untuk caching. Alat ini menggunakan caching secara lalai, dan cache mengandungi maklumat direktori imej kod pengesahan dan imej Untuk menggunakan cache Redis, anda hanya perlu mengubah suai .env
dalam fail CACHE_DRIVER=redis
dan menambah konfigurasi Redis; kategori baru, adalah disyorkan untuk memadam cache sebelumnya Jika tidak dipadam, cache akan dikemas kini secara automatik selepas tamat tempoh.
Atas ialah kandungan terperinci laravel melaksanakan kod pengesahan imej klik Google [disyorkan]. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!