|
|
@@ -40,3 +40,49 @@ func LoginByPhone(data any, c *gin.Context) map[string][]string {
|
|
|
return errs
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+type LoginByPasswordRequest struct {
|
|
|
+ CaptchaID string `json:"captcha_id,omitempty" valid:"captcha_id"`
|
|
|
+ CaptchaAnswer string `json:"captcha_answer,omitempty" valid:"captcha_answer"`
|
|
|
+
|
|
|
+ LoginID string `json:"login_id" valid:"login_id"`
|
|
|
+ Password string `json:"password,omitempty" valid:"password"`
|
|
|
+}
|
|
|
+
|
|
|
+// LoginByPassword 验证表单,返回长度等于零即通过
|
|
|
+func LoginByPassword(data any, c *gin.Context) map[string][]string {
|
|
|
+ // 1. 定制认证规则
|
|
|
+ rules := govalidator.MapData{
|
|
|
+ "captcha_id": []string{"required"},
|
|
|
+ "captcha_answer": []string{"required", "digits:6"},
|
|
|
+ "login_id": []string{"required", "min:3"},
|
|
|
+ "password": []string{"required", "min:6"},
|
|
|
+ }
|
|
|
+ // 2. 定制错误消息
|
|
|
+ messages := govalidator.MapData{
|
|
|
+ "captcha_id": []string{
|
|
|
+ "required:图片验证码的 ID 为必填",
|
|
|
+ },
|
|
|
+ "captcha_answer": []string{
|
|
|
+ "required:图片验证码答案必填",
|
|
|
+ "digits:图片验证码长度必须为 6 位的数字",
|
|
|
+ },
|
|
|
+ "login_id": []string{
|
|
|
+ "required: 登录 ID 为必填项,支持手机号、邮箱和用户名",
|
|
|
+ "min:登录 ID 长度需大于 3",
|
|
|
+ },
|
|
|
+ "password": []string{
|
|
|
+ "required:密码为必填项",
|
|
|
+ "min:密码长度需大于 6",
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ errs := validate(data, rules, messages)
|
|
|
+
|
|
|
+ // 3.... 增加其他业务逻辑
|
|
|
+ _data := data.(*LoginByPasswordRequest)
|
|
|
+ errs = validators.ValidateVerifyCode(_data.CaptchaID, _data.CaptchaAnswer, errs)
|
|
|
+
|
|
|
+ // 4. 返回错误消息
|
|
|
+ return errs
|
|
|
+}
|