gin学习——邮箱发送验证码注册用户

简介: gin学习——邮箱发送验证码注册用户

qq邮箱-设置-账户

安装

go get -u github.com/jordan-wright/email

go get -u github.com/garyburd/redigo/redis

dao/user_dao.go

func SendEmailValidate(em []string) (string,error) {
  e:=email.NewEmail()
  e.From = fmt.Sprintf("发件人笔名 <发件人邮箱>")
  e.To = em
  // 生成6位随机验证码
  rnd := rand.New(rand.NewSource(time.Now().UnixNano()))
  vCode := fmt.Sprintf("%06v", rnd.Int31n(1000000))
  t := time.Now().Format("2006-01-02 15:04:05")
  //设置文件发送的内容
  content := fmt.Sprintf(`
  <div>
    <div>
      尊敬的%s,您好!
    </div>
    <div style="padding: 8px 40px 8px 50px;">
      <p>您于 %s 提交的邮箱验证,本次验证码为<u><strong>%s</strong></u>,为了保证账号安全,验证码有效期为5分钟。请确认为本人操作,切勿向他人泄露,感谢您的理解与使用。</p>
    </div>
    <div>
      <p>此邮箱为系统邮箱,请勿回复。</p>
    </div>
  </div>
  `, em[0], t, vCode)
  e.Text = []byte(content)
  //设置服务器相关的配置
  err := e.Send("smtp.qq.com:25", smtp.PlainAuth("", "发件人邮箱", "发件人邮箱授权码", "smtp.qq.com"))
  return vCode,err
}

controller/user_controller.go

// GetValidateCode
// @Title GetValidateCode
// @Description  发送邮箱验证码 并存入redis(5分钟有效时间)
// @Author hyy 2022-03-05 18:18:47
// @Param c type description
func GetValidateCode(c *gin.Context) {
  // 获取目的邮箱
  em := []string{c.Param("email")}
  vCode, err := dao.SendEmailValidate(em)
  if err != nil {
    log.Println(err)
    c.JSON(http.StatusBadRequest, gin.H{
      "status":           400,
      "msg":              "验证码发送失败",
      "ERROR-CONTROLLER": err.Error(),
    })
    return
  }
  // 验证码存入redis 并设置过期时间5分钟
  _, err = util.RedisCont.Do("set", "vCode", vCode)
  _, _ = util.RedisCont.Do("expire", "vCode", 300)
  if err != nil {
    log.Println(err.Error())
    c.JSON(http.StatusBadRequest, gin.H{
      "status":           400,
      "msg":              "验证码存储失败",
      "ERROR-CONTROLLER": err.Error(),
    })
    return
  }
  c.JSON(http.StatusOK, gin.H{
    "msg":    "验证码发送成功",
    "status": 200,
    "vCode":  vCode,
  })
  return
}
// ValidateEmailCode
// @Title ValidateEmailCode
// @Description  验证邮箱验证码,并注册用户。
// @Author hyy 2022-03-05 18:19:18
// @Param c type description
func ValidateEmailCode(c *gin.Context) {
  vCode := c.Param("vCode")
  var user model.User
  err := c.ShouldBindJSON(&user)
  if err != nil {
    log.Println(err.Error())
    c.JSON(http.StatusBadRequest, gin.H{
      "status":           400,
      "msg":              "注册失败,json解析失败",
      "ERROR-CONTROLLER": err.Error(),
    })
    return
  }
  // 默认用户权限为2
  if user.Level == 0 {
    user.Level = 2
  }
  user.CreatAt = time.Now().Format("2006-01-02 15:04:05")
  // 设置默认头像
  if user.HandPortrait == "" {
    user.HandPortrait = "https://gin-study-1308216693.cos.ap-nanjing.myqcloud.com/handportrait.png"
  }
  // 验证结构体字段
  if err := util.Validate.Struct(&user); err != nil {
    c.JSON(http.StatusBadRequest, gin.H{
      "status":         400,
      "msg":            "注册失败,非法字段!",
      "ERROR-VALIDATE": util.GetErr(err),
    })
    return
  }
  // 对密码进行加密
  user.Password = util.Md5Encrypt(user.Password)
  // 获取存储在redis中的验证码
  vCodeRaw, err := util.RedisCont.Do("get", "vCode")
  if err != nil {
    log.Println(err.Error())
    c.JSON(http.StatusBadRequest, gin.H{
      "status":           400,
      "msg":              "Redis获取vCode失败",
      "ERROR-CONTROLLER": err.Error(),
    })
    return
  }
  if string(vCodeRaw.([]byte)) != "" && vCode == string(vCodeRaw.([]byte)) {
    result := service.InsertUser(&user)
    if result["result"].(bool) {
      result["msg"] = "注册成功!"
      c.JSON(http.StatusOK, result)
      return
    } else {
      c.JSON(http.StatusBadRequest, result)
      return
    }
  } else {
    c.JSON(http.StatusBadRequest, gin.H{
      "status": 400,
      "msg":    "验证码已失效",
    })
    return
  }
}
相关文章
邮箱发送验证码
邮箱发送验证码
584 1
邮箱发送验证码
【其他】邮箱的IMAP/SMTP服务开启与关闭(实现邮箱发送验证码的前提)
【其他】邮箱的IMAP/SMTP服务开启与关闭(实现邮箱发送验证码的前提)
2993 0
【其他】邮箱的IMAP/SMTP服务开启与关闭(实现邮箱发送验证码的前提)
|
JavaScript NoSQL Redis
Vue中实现修改邮箱、手机号等流程的大致过程、验证码由后端的redis生成验证(版本1.0)
这篇文章记录了在Vue中实现修改手机号和邮箱的大致流程,包括使用过滤器部分隐藏展示的手机号和邮箱,以及通过点击触发路由跳转的便捷方式。文章还描述了旧号码和新号码验证的界面实现,其中验证码由后端生成并通过弹窗展示给用户,未来可以接入真正的手机验证码接口。此外,还提供了修改邮箱的页面效果截图,并强调了学习是一个永无止境的过程。
Vue中实现修改邮箱、手机号等流程的大致过程、验证码由后端的redis生成验证(版本1.0)
|
网络协议 JavaScript 前端开发
使用正则表达式验证身份证号、QQ号、手机号、邮箱、地址、邮编、银行卡号、学号、车牌号、快递单号、验证码、ISBN号、网址、IPV4地址、IPV6地址、出生年月日、姓名1
使用正则表达式验证身份证号、QQ号、手机号、邮箱、地址、邮编、银行卡号、学号、车牌号、快递单号、验证码、ISBN号、网址、IPV4地址、IPV6地址、出生年月日、姓名
1030 0
|
存储 API 数据安全/隐私保护
​邮箱收不到验证码邮件是什么原因
在互联网应用中,未收到验证码邮件常令人困扰。原因包括邮件误入垃圾箱、邮箱设置不当、发件服务器故障、地址输入错误及ISP拦截。解决策略有检查垃圾邮件、清理邮箱、修正设置、确认地址准确及更换邮箱服务。推荐使用AOKSend提升邮件送达率,其优势在于高送达率、实时监测与易集成,通过注册、获取API、配置SMTP及测试,可有效解决验证码邮件送达问题,优化用户体验。
|
存储 API 数据安全/隐私保护
邮箱收不到验证码邮件是什么原因
在互联网应用中,未收到验证码邮件常令人困扰。原因包括:邮件误标为垃圾、邮箱设置不当、发件服务器故障、邮箱地址输入错误,及ISP拦截。解决策略有检查垃圾邮件、清理邮箱、修正设置、确认邮箱地址无误、联系服务提供商与ISP,或尝试其他邮箱服务。使用AOKSend等可靠邮件服务可提升送达率,其优势在于高送达率、实时监测与易集成性,确保验证码邮件及时准确到达,改善用户体验。
|
安全 API 数据安全/隐私保护
邮箱API提取邮件验证码技巧
本文介绍了如何高效提取和管理邮件验证码,涉及邮箱API原理、选择合适API、正确参数调用、安全处理、异常处理、应用场景及优化方法。注意遵守法律法规,保障用户隐私安全。
|
JavaScript 前端开发 网络协议
使用正则表达式验证身份证号、QQ号、手机号、邮箱、地址、邮编、银行卡号、学号、车牌号、快递单号、验证码、ISBN号、网址、IPV4地址、IPV6地址、出生年月日、姓名3
使用正则表达式验证身份证号、QQ号、手机号、邮箱、地址、邮编、银行卡号、学号、车牌号、快递单号、验证码、ISBN号、网址、IPV4地址、IPV6地址、出生年月日、姓名
1160 0
|
JavaScript 前端开发 安全
nodejs/express 实现邮箱发送验证码
nodejs/express 实现邮箱发送验证码
nodejs/express 实现邮箱发送验证码
nodejs/express 实现邮箱发送验证码(超简单,一个包一个函数直接使用)
nodejs/express 实现邮箱发送验证码(超简单,一个包一个函数直接使用)

热门文章

最新文章