-
Notifications
You must be signed in to change notification settings - Fork 1
/
login.go
88 lines (75 loc) · 2.85 KB
/
login.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package user
import (
"fmt"
"github.com/herman-hang/herman/application/constants"
CaptchaConstant "github.com/herman-hang/herman/application/constants/common/captcha"
"github.com/herman-hang/herman/application/validates"
"github.com/herman-hang/herman/kernel/app"
utils2 "github.com/herman-hang/herman/kernel/utils"
"github.com/mitchellh/mapstructure"
)
// CaptchaLoginValidate 用户登录验证结构体
type CaptchaLoginValidate struct {
User string `json:"user" validate:"required,min=5,max=15" label:"用户名"`
Password string `json:"password" validate:"required,min=6,max=15" label:"密码"`
CaptchaType int `json:"captchaType" validate:"required,numeric,oneof=1 2" label:"验证码类型"`
Token string `json:"token" validate:"required" label:"验证码Token"`
PointJson string `json:"pointJson" validate:"required" label:"验证码PointJson"`
}
// ExcludeCaptchaLoginValidate 用户登录排除验证码相关验证结构体
type ExcludeCaptchaLoginValidate struct {
User string `json:"user" validate:"required,min=5,max=15" label:"用户名"`
Password string `json:"password" validate:"required,min=6,max=15" label:"密码"`
}
// Login 登录验证器
// @param map[string]interface{} data 待验证数据
// @return toMap 返回验证通过的数据
func Login(data map[string]interface{}) (toMap map[string]interface{}) {
// 判断是否需要验证码
if !app.Config.Captcha.Switch {
return excludeCaptchaLogin(data)
}
return captchaLogin(data)
}
// captchaLogin 验证码登录验证器
// @param map[string]interface{} data 待验证数据
// @return toMap 返回验证通过的数据
func captchaLogin(data map[string]interface{}) (toMap map[string]interface{}) {
var login CaptchaLoginValidate
// map赋值给结构体
if err := mapstructure.WeakDecode(data, &login); err != nil {
panic(constants.MapToStruct)
}
if err := validates.Validate(login); err != nil {
panic(err.Error())
}
// 验证码二次验证
err := utils2.Factory().GetService(fmt.Sprintf("%s", data["captchaType"])).Verification(fmt.Sprintf("%s", data["token"]),
fmt.Sprintf("%s", data["PointJson"]))
if err != nil {
panic(CaptchaConstant.CheckCaptchaError)
}
toMap, err = utils2.ToMap(&login, "json")
if err != nil {
panic(constants.StructToMap)
}
return toMap
}
// excludeCaptchaLogin 排除验证码登录验证器
// @param map[string]interface{} data 待验证数据
// @return toMap 返回验证通过的数据
func excludeCaptchaLogin(data map[string]interface{}) (toMap map[string]interface{}) {
var login ExcludeCaptchaLoginValidate
// map赋值给结构体
if err := mapstructure.WeakDecode(data, &login); err != nil {
panic(constants.MapToStruct)
}
if err := validates.Validate(login); err != nil {
panic(err.Error())
}
toMap, err := utils2.ToMap(&login, "json")
if err != nil {
panic(constants.StructToMap)
}
return toMap
}