Go怎么整合captcha实现验证码功能
1 captcha概述
captcha的使用设计流程

2 实现代码(使用内存缓存)
2.1 后端代码
生成验证码图片API:
//GenerateImg 生成验证码图片名称
func GenerateImg(w http.ResponseWriter, req *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*") //允许访问所有域
w.Header().Add("Access-Control-Allow-Headers", "Content-Type")
d := struct {
CaptchaId string
}{
captcha.New(),
}
bytes, _ := json.Marshal(map[string]interface{}{"code": 0, "msg": "", "count": 0, "data": d.CaptchaId})
w.Write(bytes)
}HTTP服务:
func RunHttp(port string) {
logger := log.Default()
http.Header{}.Set("Access-Control-Allow-Origin", "*")
http.HandleFunc("/user/login", controller.UserLogin) //登录API
http.HandleFunc("/img", controller.GenerateImg) //生成验证码图片API
http.Handle("/verify/", captcha.Server(captcha.StdWidth, captcha.StdHeight)) //刷新验证码API
logger.Println("Http Server Running port:", port, "...")
http.ListenAndServe(":"+port, nil)
}启动HTTP服务:
func main() {
web.RunHttp("8000")
}验证码验证:
//UserLogin 用户登录
func UserLogin(w http.ResponseWriter, req *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Add("Access-Control-Allow-Headers", "Content-Type")
......
var m map[string]string
body, err := ioutil.ReadAll(req.Body)
if err != nil {
panic(err)
}
json.Unmarshal(body, &m)
var k = m["verify_key"]
var v = m["verify_value"]
res := captcha.VerifyString(k, v)
if res { // 验证通过
......
} else { // 验证未通过
......
}
......
}2.2 前端代码
......