Golang 生成图形验证码并验证

yufei       4 年, 7 月 前       7332

前几天网站遭受垃圾信息攻击,于是就想添加一个图形验证码来玩玩。

网站使用 Python3 来写,但是图像验证我想写成一个服务,所以就用 Golang 来写了。

我们使用的库是 https://github.com/mojocn/base64Captcha

这个库有一个预览网站 ,看预览网站好酷炫有没有,但世纪用起来啊,真的是一言难尽。

对了,作者的官方博客上还是有很多了的,大家不妨去看看 https://mojotv.cn/

废话不多说了,我的用在生产环境的 图形验证码的代码如下 (正式环境有所变更,但核心都一样)

package main

import (
    "encoding/json"
    "fmt"
    captcha "github.com/mojocn/base64Captcha"
    "log"
    "net/http"
)

var store = captcha.DefaultMemStore

func NewDriver() *captcha.DriverString {
    driver := new(captcha.DriverString)
    driver.Height = 44
    driver.Width = 120
    driver.NoiseCount = 5
    driver.ShowLineOptions = captcha.OptionShowSineLine | captcha.OptionShowSlimeLine | captcha.OptionShowHollowLine
    driver.Length = 6
    driver.Source = "1234567890qwertyuipkjhgfdsazxcvbnm"
    driver.Fonts = []string{"wqy-microhei.ttc"}
    return driver
}

// 生成图形验证码
func generateCaptchaHandler(w http.ResponseWriter, r *http.Request) {
    var driver = NewDriver().ConvertFonts()
    c := captcha.NewCaptcha(driver, store)
    _, content, answer := c.Driver.GenerateIdQuestionAnswer()
    id := "captcha:yufei"
    item, _ := c.Driver.DrawCaptcha(content)
    c.Store.Set(id, answer)
    item.WriteTo(w)
}

// 验证
func captchaVerifyHandle(w http.ResponseWriter, r *http.Request) {

    id := "captcha:yufei"
    code := r.FormValue("code")
    body := map[string]interface{}{"code": 1000, "msg": "failed"}
    if store.Verify(id, code, true) {
        body = map[string]interface{}{"code": 1001, "msg": "ok"}
    }
    w.Header().Set("Content-Type", "application/json; charset=utf-8")
    json.NewEncoder(w).Encode(body)
}

func main() {
    http.HandleFunc("/captcha", generateCaptchaHandler)
    http.HandleFunc("/captcha/verify", captchaVerifyHandle)

    fmt.Println("Server is at :8080")
    if err := http.ListenAndServe(":8080", nil); err != nil {
        log.Fatal(err)
    }
}

所以,如果要做一个服务是不是也很简单的事情? 改天有机会把图形验证服务也公布出来给大家

运行

go run main.go

然后访问 http://localhost:8080/captcha 获取图形验证码

访问 http://localhost:8080/captcha/verify?code=xxxx 来验证

目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.