artisanbarista / laravel-altcha
为 Altcha 提供的 Laravel 服务器实现。
v1.0.0
2024-09-25 09:22 UTC
Requires
- php: ^8.1
- illuminate/contracts: ^10.0|^11.0
- spatie/laravel-package-tools: ^1.14.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.8
- orchestra/testbench: ^8.8
- pestphp/pest: ^2.20
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- spatie/laravel-ray: ^1.26
README
这是一个为 Altcha 服务器端的 Laravel 实现,Altcha 是一种不需要第三方服务的证明工作 captcha。
安装
您可以通过 composer 安装此包
composer require grantholle/laravel-altcha
可选,使用以下命令发布配置文件
php artisan vendor:publish --tag="altcha-config"
使用方法
在 .env
(或发布的配置文件)中,设置以下变量
# Required, sort of like a password ALTCHA_HMAC_KEY= # Optional, defaults to SHA-256. Can be SHA-384 or SHA-512 # ALTCHA_ALGORITHM="SHA-256"
默认情况下,该包注册了一个 /altcha-challenge
端点,用于在您的前端使用。
前端
遵循 前端集成,使用以下代码片段来获取挑战
<altcha-widget challengeurl="/altcha-challenge"></altcha-widget>
前端实现可能会有所不同,但这里有一个示例 Vue 组件可以使用
<template> <altcha-widget challengeurl="/altcha-challenge" @statechange="stateChanged"></altcha-widget> </template> <script setup> import 'altcha' const emit = defineEmits(['update:modelValue']) const stateChanged = ev => { if (ev.detail.state === 'verified') { emit('update:modelValue', ev.detail.payload) } } </script>
在 Inertja.js 表单中,您可以使用此组件如下
<template> <form @submit.prevent="form.post('/login')"> <label for="email">Email</label> <input type="email" name="email" v-model="form.email"> <label for="password">Password</label> <input type="password" name="password" v-model="form.password"> <Altcha v-model="form.token" /> <button type="submit">Submit</button> </form> </template> <script setup> import { useForm } from '@inertiajs/inertia-vue3' // This is the component we made above import Altcha from '@/components/forms/Altcha.vue' const form = useForm({ email: null, password: null, token: null, }) </script>
后端验证
要验证前端生成的 token/payload,可以使用一个名为 ValidAltcha
的规则,假设令牌作为请求中的 token
传递
use GrantHolle\Altcha\Rules\ValidAltcha; $request->validate([ 'email' => ['required', 'email'], 'password' => ['required'], 'altcha' => ['required', new ValidAltcha()], ]);
测试
composer test
变更日志
有关最近更改的更多信息,请参阅 CHANGELOG
贡献
有关详细信息,请参阅 CONTRIBUTING
安全漏洞
请查看我们的安全策略 如何报告安全漏洞
鸣谢
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件