j
jaryue
V1
2023/04/21阅读:18主题:默认主题
项目1day4
新增表verification_codes,表中的字段包括:
-
id:验证码的唯一标识符,使用自增的整数或者UUID等。 -
code:验证码的文本内容,通常是由数字、字母或者符号组成。 -
image:验证码的图片内容,通常是由前端生成的Base64编码字符串。 -
created_at:验证码的创建时间,通常使用时间戳或者日期格式。
实现图片验证码图片的生成,储存sql,发送给用户操作
-
生成图片验证码: 结合第三方库goCaptcha: goCaptcha 是一个轻量级的 Go 语言库,用于生成数字和字母验证码图片
// 发送图片验证码图片中间件(用户提交请求时)
func picverfi(db *sql.DB) gee7.HandlerFunc {
return func(ctx *gee7.Context) {
// 生成验证码
id := uuid.New().String() //生成唯一标识符
code := captcha.RandomDigits(4)
img := captcha.NewImage(id, code, captcha.StdWidth, captcha.StdHeight)
// 生成验证码
var buf bytes.Buffer
_, err := img.WriteTo(&buf)
if err != nil {
// 处理错误
}
// 将验证码和图片存储到数据库中
encodedImage := base64.StdEncoding.EncodeToString(buf.Bytes())
verificationCode := VerificationCode{Code: code, Image: encodedImage, CreatedAt: time.Now()}
result, err := db.Exec("INSERT INTO verification_codes (code, image, created_at) VALUES (?, ?, ?)", verificationCode.Code, verificationCode.Image, verificationCode.CreatedAt)
if err != nil {
ctx.FailJson(http.StatusInternalServerError,"Internal Server Error:"+err.Error())
return
}
// 返回验证码图片
verificationCode.ID, err = result.LastInsertId()
if err != nil {
ctx.FailJson(http.StatusInternalServerError,"Internal Server Error:"+err.Error())
return
}
ctx.Writer.Header().Set("Content-Type", "image/png")
ctx.Writer.Write([]byte(encodedImage))
}
}
作者介绍
j
jaryue
V1