👉👉👉 English 👈👈👈
go-cap 是 @cap.js/server 的 Go 语言实现版
cap.js 是一套工作量证明(PoW)验证码组件
Notice
此包基于@cap.js/server@2.0.0实现, 基本适配其 2.0.0+ 版本 此包内部依赖github.com/redis/go-redis/v9, 若使用 Redis 需要v6.2.0以上版本
Reference
Cap 源仓库
cap_go_server 另一个 Go 实现
项目内引用
go get github.com/ackcoder/go-cap业务逻辑中使用
// 注: 创建实例一般放在 service 或 logic 层中
c := gocap.New()
challenge, err := c.CreateChallenge(context.Background())
fmt.Println("测试", challenge, err) //challenge: 待返回给前端组件的质询数据HTTP 服务示例
package main
import (
"net/http"
"fmt"
gocap "github.com/ackcoder/go-cap"
)
func main() {
c := gocap.New()
http.HandleFunc("/challenge", c.HandleCreateChallenge())
http.HandleFunc("/redeem", c.HandleRedeemChallenge())
http.HandleFunc("/validate", c.HandleValidateToken())
fmt.Println("go-cap server start...")
http.ListenAndServe(":8099", nil)
}实例创建 gocap.New() 可选配置项入参:
WithStorage(storage Storage)
配置自定义存储, 默认是内存存储(sync.Map实现)
目前内置了 Redis 存储实现, 只需 Redis v6.2.0 以上版本
也可以自行实现 Storage 接口
WithChallenge(count, size, difficulty int)
配置质询数量(default:50)、大小(default:32)、难度(default:4)
WithChallengeExpires(expires int)
配置质询过期时间, 默认10分钟
WithTokenExpires(expires int)
配置验证令牌过期时间, 默认20分钟
WithTokenVerifyOnce(isOnce bool)
配置验证令牌检查次数, 默认一次性, 比较完即删除
WithLimiterParams(rps, burst int)
配置限流器参数, 默认10次/秒、最大突发50次
仅在 Handlexxx 方法调用时生效, 每个 Handlexxx 方法独立计算限流
参考源项目使用 Apache License 2.0, 请参阅 LICENSE 文件