login_request.go 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package requests
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "github.com/runningwater/gohub/app/requests/validators"
  5. "github.com/thedevsaddam/govalidator"
  6. )
  7. type LoginByPhoneRequest struct {
  8. Phone string `json:"phone,omitempty" valid:"phone"`
  9. VerifyCode string `json:"verify_code,omitempty" valid:"verify_code"`
  10. }
  11. // LoginByPhone 验证表单,返回长度等于零即通过
  12. func LoginByPhone(data any, c *gin.Context) map[string][]string {
  13. // 1. 定制认证规则
  14. rules := govalidator.MapData{
  15. "phone": []string{"required", "digits:11"},
  16. "verify_code": []string{"required", "digits:6"},
  17. }
  18. // 2. 定制错误消息
  19. messages := govalidator.MapData{
  20. "phone": []string{
  21. "required:手机号为必填项,参数名称 phone",
  22. "digits:手机号长度必须为 11 位的数字",
  23. },
  24. "verify_code": []string{
  25. "required:验证码答案必填",
  26. "digits:验证码长度必须为 6 位的数字",
  27. },
  28. }
  29. errs := validate(data, rules, messages)
  30. // 3. ... 增加其他业务逻辑
  31. _data := data.(*LoginByPhoneRequest)
  32. errs = validators.ValidateVerifyCode(_data.Phone, _data.VerifyCode, errs)
  33. // 4. 返回错误消息
  34. return errs
  35. }
  36. type LoginByPasswordRequest struct {
  37. CaptchaID string `json:"captcha_id,omitempty" valid:"captcha_id"`
  38. CaptchaAnswer string `json:"captcha_answer,omitempty" valid:"captcha_answer"`
  39. LoginID string `json:"login_id" valid:"login_id"`
  40. Password string `json:"password,omitempty" valid:"password"`
  41. }
  42. // LoginByPassword 验证表单,返回长度等于零即通过
  43. func LoginByPassword(data any, c *gin.Context) map[string][]string {
  44. // 1. 定制认证规则
  45. rules := govalidator.MapData{
  46. "captcha_id": []string{"required"},
  47. "captcha_answer": []string{"required", "digits:6"},
  48. "login_id": []string{"required", "min:3"},
  49. "password": []string{"required", "min:6"},
  50. }
  51. // 2. 定制错误消息
  52. messages := govalidator.MapData{
  53. "captcha_id": []string{
  54. "required:图片验证码的 ID 为必填",
  55. },
  56. "captcha_answer": []string{
  57. "required:图片验证码答案必填",
  58. "digits:图片验证码长度必须为 6 位的数字",
  59. },
  60. "login_id": []string{
  61. "required: 登录 ID 为必填项,支持手机号、邮箱和用户名",
  62. "min:登录 ID 长度需大于 3",
  63. },
  64. "password": []string{
  65. "required:密码为必填项",
  66. "min:密码长度需大于 6",
  67. },
  68. }
  69. errs := validate(data, rules, messages)
  70. // 3.... 增加其他业务逻辑
  71. _data := data.(*LoginByPasswordRequest)
  72. errs = validators.ValidateVerifyCode(_data.CaptchaID, _data.CaptchaAnswer, errs)
  73. // 4. 返回错误消息
  74. return errs
  75. }