artisanbarista/laravel-altcha

为 Altcha 提供的 Laravel 服务器实现。

v1.0.0 2024-09-25 09:22 UTC

This package is auto-updated.

Last update: 2024-09-25 09:35:12 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

这是一个为 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)。有关更多信息,请参阅 许可证文件