修复用户组停用时的登录问题 + 优化IUserAuth的checkUser参数

This commit is contained in:
lanrenwo 2022-06-07 09:46:45 +08:00
parent f46a30488a
commit 8ede613488
3 changed files with 10 additions and 16 deletions

View File

@ -66,13 +66,13 @@ func SetUser(v *User) error {
return err return err
} }
// 验证用户登信息 // 验证用户登信息
func CheckUser(name, pwd, group string) error { func CheckUser(name, pwd, group string) error {
// 获取登入的group数据 // 获取登入的group数据
groupData := &Group{} groupData := &Group{}
err := One("Name", group, groupData) err := One("Name", group, groupData)
if err != nil { if err != nil || groupData.Status != 1 {
return fmt.Errorf("%s %s", name, "No用户组") return fmt.Errorf("%s - %s", name, "用户组错误")
} }
// 初始化Auth // 初始化Auth
if len(groupData.Auth) == 0 { if len(groupData.Auth) == 0 {
@ -89,10 +89,10 @@ func CheckUser(name, pwd, group string) error {
return fmt.Errorf("%s %s", "未知的认证方式: ", authType) return fmt.Errorf("%s %s", "未知的认证方式: ", authType)
} }
auth := makeInstance(authType).(IUserAuth) auth := makeInstance(authType).(IUserAuth)
return auth.checkUser(name, pwd, groupData.Auth) return auth.checkUser(name, pwd, groupData)
} }
// 验证本地用户登信息 // 验证本地用户登信息
func checkLocalUser(name, pwd, group string) error { func checkLocalUser(name, pwd, group string) error {
// TODO 严重问题 // TODO 严重问题
// return nil // return nil
@ -110,12 +110,6 @@ func checkLocalUser(name, pwd, group string) error {
if !utils.InArrStr(v.Groups, group) { if !utils.InArrStr(v.Groups, group) {
return fmt.Errorf("%s %s", name, "用户组错误") return fmt.Errorf("%s %s", name, "用户组错误")
} }
groupData := &Group{}
err = One("Name", group, groupData)
if err != nil || groupData.Status != 1 {
return fmt.Errorf("%s - %s", name, "用户组错误")
}
// 判断otp信息 // 判断otp信息
pinCode := pwd pinCode := pwd
if !v.DisableOtp { if !v.DisableOtp {

View File

@ -9,7 +9,7 @@ var authRegistry = make(map[string]reflect.Type)
type IUserAuth interface { type IUserAuth interface {
checkData(authData map[string]interface{}) error checkData(authData map[string]interface{}) error
checkUser(name string, pwd string, authData map[string]interface{}) error checkUser(name, pwd string, g *Group) error
} }
func makeInstance(name string) interface{} { func makeInstance(name string) interface{} {

View File

@ -38,16 +38,16 @@ func (auth AuthRadius) checkData(authData map[string]interface{}) error {
return nil return nil
} }
func (auth AuthRadius) checkUser(name string, pwd string, authData map[string]interface{}) error { func (auth AuthRadius) checkUser(name, pwd string, g *Group) error {
pl := len(pwd) pl := len(pwd)
if name == "" || pl < 1 { if name == "" || pl < 1 {
return fmt.Errorf("%s %s", name, "密码错误") return fmt.Errorf("%s %s", name, "密码错误")
} }
authType := authData["type"].(string) authType := g.Auth["type"].(string)
if _, ok := authData[authType]; !ok { if _, ok := g.Auth[authType]; !ok {
return fmt.Errorf("%s %s", name, "Radius的radius值不存在") return fmt.Errorf("%s %s", name, "Radius的radius值不存在")
} }
bodyBytes, err := json.Marshal(authData[authType]) bodyBytes, err := json.Marshal(g.Auth[authType])
if err != nil { if err != nil {
return fmt.Errorf("%s %s", name, "Radius Marshal出现错误") return fmt.Errorf("%s %s", name, "Radius Marshal出现错误")
} }