verify_code_request.go 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package requests
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "github.com/runningwater/gohub/pkg/captcha"
  5. "github.com/thedevsaddam/govalidator"
  6. )
  7. type VerifyCodeRequest struct {
  8. Phone string `json:"phone,omitempy" valid:"phone"`
  9. CaptchaID string `json:"captcha_id,omitempy" valid:"captcha_id"`
  10. CaptchaAnswer string `json:"captcha_answer,omitempy" valid:"captcha_answer"`
  11. }
  12. func VerifyCodePhone(data any, c *gin.Context) map[string][]string {
  13. // 1. 定制认证规则
  14. rules := govalidator.MapData{
  15. "phone": []string{"required", "digits:11"},
  16. "captcha_id": []string{"required"},
  17. "captcha_answer": []string{"required", "digits:6"},
  18. }
  19. // 2. 定制错误信息
  20. messages := govalidator.MapData{
  21. "phone": []string{
  22. "required:手机号不能为空",
  23. "digits:手机号格式不正确,长度必须为11位",
  24. },
  25. "captcha_id": []string{
  26. "required:验证码ID不能为空",
  27. },
  28. "captcha_answer": []string{
  29. "required:验证码不能为空",
  30. "digits:验证码格式不正确,长度必须为6位",
  31. },
  32. }
  33. errs := validate(data, rules, messages)
  34. // Captcha 图片验证
  35. _data := data.(*VerifyCodeRequest)
  36. if ok := captcha.NewCaptcha().VerifyCaptcha(_data.CaptchaID, _data.CaptchaAnswer); !ok {
  37. errs["captcha_answer"] = append(errs["captcha_answer"], "验证码错误")
  38. }
  39. // 3. 返回错误信息
  40. return errs
  41. }
  42. type VerifyCodeEmailRequest struct {
  43. Email string `json:"email,omitempy" valid:"email"`
  44. CaptchaID string `json:"captcha_id,omitempy" valid:"captcha_id"`
  45. CaptchaAnswer string `json:"captcha_answer,omitempy" valid:"captcha_answer"`
  46. }
  47. func VerifyCodeEmail(data any, c *gin.Context) map[string][]string {
  48. // 1. 定制认证规则
  49. rules := govalidator.MapData{
  50. "email": []string{"required", "min:4", "max:30", "email"},
  51. "captcha_id": []string{"required"},
  52. "captcha_answer": []string{"required", "digits:6"},
  53. }
  54. // 2. 定制错误信息
  55. messages := govalidator.MapData{
  56. "email": []string{
  57. "required:邮箱不能为空",
  58. "min:邮箱长度需大于 4",
  59. "max:邮箱长度需小于 30",
  60. "email:邮箱格式不正确",
  61. },
  62. "captcha_id": []string{
  63. "required:验证码ID不能为空",
  64. },
  65. "captcha_answer": []string{
  66. "required:验证码不能为空",
  67. "digits:验证码格式不正确,长度必须为6位",
  68. },
  69. }
  70. errs := validate(data, rules, messages)
  71. // Captcha 图片验证
  72. _data := data.(*VerifyCodeEmailRequest)
  73. if ok := captcha.NewCaptcha().VerifyCaptcha(_data.CaptchaID, _data.CaptchaAnswer); !ok {
  74. errs["captcha_answer"] = append(errs["captcha_answer"], "验证码错误")
  75. }
  76. // 3. 返回错误信息
  77. return errs
  78. }