hcaptcha

hcaptcha 中间件为 Flame 实例提供 hCaptchahcaptcha - 图1在新窗口打开 验证服务的集成。

你可以在 GitHubhcaptcha - 图2在新窗口打开 上阅读该中间件的源码或通过 pkg.go.devhcaptcha - 图3在新窗口打开 查看 API 文档。

下载安装

Go 语言的最低版本要求为 1.16

  1. go get github.com/flamego/hcaptcha

用法示例

注意

本小结仅展示 hcaptcha 中间件的相关用法,示例中的用户验证方案绝不可以直接被用于生产环境。

hcaptcha.Captchahcaptcha - 图4在新窗口打开 可以配合 hcaptcha.Optionshcaptcha - 图5在新窗口打开 对中间件进行配置,并使用 hcaptcha.HCaptcha.Verify 来进行验证码的校验:

  • main.go
  • templates/home.tmpl
  1. package main
  2. import (
  3. "fmt"
  4. "net/http"
  5. "github.com/flamego/flamego"
  6. "github.com/flamego/hcaptcha"
  7. "github.com/flamego/template"
  8. )
  9. func main() {
  10. f := flamego.Classic()
  11. f.Use(template.Templater())
  12. f.Use(hcaptcha.Captcha(
  13. hcaptcha.Options{
  14. Secret: "<SECRET>",
  15. },
  16. ))
  17. f.Get("/", func(t template.Template, data template.Data) {
  18. data["SiteKey"] = "<SITE KEY>"
  19. t.HTML(http.StatusOK, "home")
  20. })
  21. f.Post("/", func(w http.ResponseWriter, r *http.Request, h hcaptcha.HCaptcha) {
  22. token := r.PostFormValue("h-captcha-response")
  23. resp, err := h.Verify(token)
  24. if err != nil {
  25. w.WriteHeader(http.StatusBadRequest)
  26. _, _ = w.Write([]byte(err.Error()))
  27. return
  28. } else if !resp.Success {
  29. w.WriteHeader(http.StatusBadRequest)
  30. _, _ = w.Write([]byte(fmt.Sprintf("Verification failed, error codes %v", resp.ErrorCodes)))
  31. return
  32. }
  33. w.WriteHeader(http.StatusOK)
  34. _, _ = w.Write([]byte("Verified!"))
  35. })
  36. f.Run()
  37. }
  1. <html>
  2. <head>
  3. <script src="https://hcaptcha.com/1/api.js"></script>
  4. </head>
  5. <body>
  6. <form method="POST">
  7. <div class="h-captcha" data-sitekey="{{.SiteKey}}"></div>
  8. <input type="submit" name="button" value="Submit">
  9. </form>
  10. </body>
  11. </html>

下图为程序运行时浏览器中所展示的内容:

Form with hCaptcha