grantholle / laravel-altcha
为Altcha提供的Laravel服务器端实现。
1.1.0
2024-03-19 20:30 UTC
Requires
- php: ^8.2
- 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(https://altcha.org/,一个不需要任何第三方服务的证明劳动工作量验证码)的服务器端Laravel实现。
安装
您可以通过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作为请求中的token
传递
use GrantHolle\Altcha\Rules\ValidAltcha; $request->validate([ 'email' => ['required', 'email'], 'password' => ['required'], 'altcha' => ['required', new ValidAltcha()], ]);
测试
composer test
更新日志
有关最近更改的更多信息,请参阅更新日志
贡献
有关详细信息,请参阅贡献指南
安全漏洞
请参阅我们的安全策略,了解如何报告安全漏洞。
致谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件