在将hCaptcha集成到我的golang(go fiber(项目中时,我遵循了以下过程:
<!-- index.html -->
<html>
<head>
<title>hCaptcha Demo</title>
<script src="https://hcaptcha.com/1/api.js" async defer></script>
</head>
<body>
<form action="/page" method="POST">
<input type="text" name="email" placeholder="Email" />
<input type="password" name="password" placeholder="Password" />
<div class="h-captcha" data-sitekey="HCAPTCHA_SITE_KEY"></div>
<br />
<input type="submit" value="Submit" />
</form>
</body>
</html>
在戈兰的后端:
func HandleCaptcha(responseToken string) {
err := godotenv.Load()
if err != nil {
log.Fatalf("Error occured loading .env. Err: %s", err)
}
data := map[string]string{
"secret": os.Getenv("HCAPTCHA_SECRET_KEY"),
"response": responseToken, // form.Value["h-captcha-response"][0]
// "remoteip": "ip-address-of-the-user",
}
json_data, err := json.Marshal(data)
if err != nil {
log.Fatal(err)
}
resp, err := http.Post(
"https://hcaptcha.com/siteverify",
"application/x-www-form-urlencoded",
bytes.NewBuffer(json_data),
)
if err != nil {
log.Fatal(err)
}
var res map[string]interface{}
json.NewDecoder(resp.Body).Decode(&res)
fmt.Println(res["json"])
if !res["success"].(bool) {
panic(res["error-codes"].([]interface{}))
}
}
在这一点上,我得到了一个错误:
<nil>
panic: ([]interface {}) 0xc000012c78
goroutine 6 [running]:
main.HandleCaptcha({0xc0001f7300, 0x103e})
captcha.go:45 +0x3d7
我不确定我是否走在正确的道路上。问题是否与我发送解决方案或处理响应的方式有关?我找不到专门针对Golang的官方文档,甚至找不到与这个主题相关的博客文章。顺便说一句,目前我尽量避免使用卡塔拉的包。
只需打印错误代码的结构,即可查找是否为List类型。
fmt.Printf("error-codes: %+vn",res["error-codes"])
您可以定义响应的结构,如下所示:
type Resp struct{
Json map[string]interface{} `json:"json"`
ErrorCodes []string `json:"error_codes"` //maybe string list i guess
Success bool `json:"success"`
}