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

View File

@ -9,7 +9,7 @@ var authRegistry = make(map[string]reflect.Type)
type IUserAuth interface {
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{} {

View File

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