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