Browse Source

config

master
linquan 1 month ago
parent
commit
0cdbf1371d
  1. 67
      internal/service/sys_user.go
  2. 2
      internal/serviceGame/game_role.go

67
internal/service/sys_user.go

@ -21,6 +21,7 @@ import (
"github.com/gogf/gf/v2/util/grand" "github.com/gogf/gf/v2/util/grand"
"github.com/mssola/user_agent" "github.com/mssola/user_agent"
"log" "log"
"time"
"tyj_admin/api/v1/system" "tyj_admin/api/v1/system"
"tyj_admin/internal/consts" "tyj_admin/internal/consts"
"tyj_admin/internal/dao" "tyj_admin/internal/dao"
@ -64,6 +65,12 @@ type CodeModel struct {
Time *gtime.Time Time *gtime.Time
} }
type UserStatus struct {
Account string
Times int
Time *gtime.Time
}
var ( var (
notCheckAuthAdminIds *gset.Set //无需验证权限的用户id notCheckAuthAdminIds *gset.Set //无需验证权限的用户id
userService = userImpl{ userService = userImpl{
@ -71,6 +78,7 @@ var (
} }
codes map[string]CodeModel codes map[string]CodeModel
userStatus map[string]*UserStatus
) )
func User() IUser { func User() IUser {
@ -79,6 +87,38 @@ func User() IUser {
func init() { func init() {
codes = make(map[string]CodeModel) codes = make(map[string]CodeModel)
userStatus = make(map[string]*UserStatus)
}
const freeze = 5
const expTime = 10
func getUserStatus(account string) *UserStatus {
initUserStatus()
data, ok := userStatus[account]
if !ok {
userStatus[account] = &UserStatus{
Account: account,
Times: 1,
}
} else if data.Times < 5 {
data.Times += 1
if data.Times == 5 {
data.Time = gtime.Now()
}
}
//log.Println("getUserStatus: ", gjson.MustEncodeString(data))
return data
}
func initUserStatus() {
keys := make([]string, len(userStatus))
for k, v := range userStatus {
if v.Time != nil && v.Time.Add(freeze*time.Minute).Unix() < gtime.Now().Unix() {
keys = append(keys, k)
}
}
} }
func (s *userImpl) NotCheckAuthAdminIds(ctx context.Context) *gset.Set { func (s *userImpl) NotCheckAuthAdminIds(ctx context.Context) *gset.Set {
@ -91,6 +131,11 @@ func (s *userImpl) NotCheckAuthAdminIds(ctx context.Context) *gset.Set {
func (s *userImpl) GetAdminUserByUsernamePassword(ctx context.Context, req *system.UserLoginReq) (user *model2.LoginUserRes, err error) { func (s *userImpl) GetAdminUserByUsernamePassword(ctx context.Context, req *system.UserLoginReq) (user *model2.LoginUserRes, err error) {
err = g.Try(ctx, func(ctx context.Context) { err = g.Try(ctx, func(ctx context.Context) {
status := getUserStatus(req.Username)
if status != nil && status.Time != nil {
err = gerror.New("账号被冻结," + fmt.Sprint(status.Time.Add(freeze*time.Minute).Layout(consts.TIME_FORMAT)) + "后解冻。")
return
}
user, err = s.GetUserByUsername(ctx, req.Username) user, err = s.GetUserByUsername(ctx, req.Username)
liberr.ErrIsNil(ctx, err) liberr.ErrIsNil(ctx, err)
liberr.ValueIsNil(user, "账号密码错误") liberr.ValueIsNil(user, "账号密码错误")
@ -109,6 +154,11 @@ func (s *userImpl) GetAdminUserByUsernamePassword(ctx context.Context, req *syst
func (s *userImpl) GetAdminUserByPhone(ctx context.Context, req *system.UserLoginMobileReq) (user *model2.LoginUserRes, err error) { func (s *userImpl) GetAdminUserByPhone(ctx context.Context, req *system.UserLoginMobileReq) (user *model2.LoginUserRes, err error) {
err = g.Try(ctx, func(ctx context.Context) { err = g.Try(ctx, func(ctx context.Context) {
status := getUserStatus(req.Phone)
if status != nil && status.Time != nil {
err = gerror.New("账号被冻结," + fmt.Sprint(status.Time.Add(freeze*time.Minute).Layout(consts.TIME_FORMAT)) + "后解冻。")
return
}
user, err = s.GetUserByMobile(ctx, req.Phone) user, err = s.GetUserByMobile(ctx, req.Phone)
liberr.ErrIsNil(ctx, err) liberr.ErrIsNil(ctx, err)
liberr.ValueIsNil(user, "手机验证码错误") liberr.ValueIsNil(user, "手机验证码错误")
@ -119,8 +169,10 @@ func (s *userImpl) GetAdminUserByPhone(ctx context.Context, req *system.UserLogi
log.Printf("GetAdminUserByPhone >>> Phone:%s", req.Phone) log.Printf("GetAdminUserByPhone >>> Phone:%s", req.Phone)
//验证密码 //验证密码
model, ok := codes[req.Phone] model, ok := codes[req.Phone]
if !ok || model.Time.Add(expTime*time.Minute).Unix() < gtime.Now().Unix() {
if ok {
log.Printf("GetAdminUserByPhone >>> Phone:%s, time %s ", req.Phone, fmt.Sprint(model.Time.Unix())+"--"+fmt.Sprint(gtime.Now().Unix())) log.Printf("GetAdminUserByPhone >>> Phone:%s, time %s ", req.Phone, fmt.Sprint(model.Time.Unix())+"--"+fmt.Sprint(gtime.Now().Unix()))
if !ok || model.Time.Unix()+600 < gtime.Now().Unix() { }
liberr.ErrIsNil(ctx, gerror.New("手机验证码错误")) liberr.ErrIsNil(ctx, gerror.New("手机验证码错误"))
} }
if libUtils.EncryptPassword(req.Code+fmt.Sprint(model.Time.Unix()), user.UserSalt) != model.Password { if libUtils.EncryptPassword(req.Code+fmt.Sprint(model.Time.Unix()), user.UserSalt) != model.Password {
@ -132,6 +184,11 @@ func (s *userImpl) GetAdminUserByPhone(ctx context.Context, req *system.UserLogi
func (s *userImpl) GetAdminUserByEmail(ctx context.Context, req *system.UserLoginEmailReq) (user *model2.LoginUserRes, err error) { func (s *userImpl) GetAdminUserByEmail(ctx context.Context, req *system.UserLoginEmailReq) (user *model2.LoginUserRes, err error) {
err = g.Try(ctx, func(ctx context.Context) { err = g.Try(ctx, func(ctx context.Context) {
status := getUserStatus(req.Email)
if status != nil && status.Time != nil {
err = gerror.New("账号被冻结," + fmt.Sprint(status.Time.Add(freeze*time.Minute).Layout(consts.TIME_FORMAT)) + "后解冻。")
return
}
user, err = s.GetUserByEmail(ctx, req.Email) user, err = s.GetUserByEmail(ctx, req.Email)
liberr.ErrIsNil(ctx, err) liberr.ErrIsNil(ctx, err)
liberr.ValueIsNil(user, "验证码错误") liberr.ValueIsNil(user, "验证码错误")
@ -139,11 +196,13 @@ func (s *userImpl) GetAdminUserByEmail(ctx context.Context, req *system.UserLogi
if user.UserStatus == 0 { if user.UserStatus == 0 {
liberr.ErrIsNil(ctx, gerror.New("账号已被冻结")) liberr.ErrIsNil(ctx, gerror.New("账号已被冻结"))
} }
log.Printf("GetAdminUserByPhone >>> Email:%s", req.Email) log.Printf("GetAdminUserByEmail >>> Email:%s", req.Email)
//验证密码 //验证密码
model, ok := codes[req.Email] model, ok := codes[req.Email]
log.Printf("GetAdminUserByPhone >>> Email:%s, time %s ", req.Email, fmt.Sprint(model.Time.Unix())+"--"+fmt.Sprint(gtime.Now().Unix())) if !ok || model.Time.Add(expTime*time.Minute).Unix() < gtime.Now().Unix() {
if !ok || model.Time.Unix()+600 < gtime.Now().Unix() { if !ok {
log.Printf("GetAdminUserByEmail >>> Email:%s, time %s ", req.Email, fmt.Sprint(model.Time.Unix())+"--"+fmt.Sprint(gtime.Now().Unix()))
}
liberr.ErrIsNil(ctx, gerror.New("验证码错误")) liberr.ErrIsNil(ctx, gerror.New("验证码错误"))
} }
if libUtils.EncryptPassword(req.Code+fmt.Sprint(model.Time.Unix()), user.UserSalt) != model.Password { if libUtils.EncryptPassword(req.Code+fmt.Sprint(model.Time.Unix()), user.UserSalt) != model.Password {

2
internal/serviceGame/game_role.go

@ -70,7 +70,7 @@ func (s *gameRoleImpl) GetOnlineList(ctx context.Context, req *game.RoleOnlineRe
for _, v := range json.Get("Accounts").Array() { for _, v := range json.Get("Accounts").Array() {
account := map[string]interface{}{} account := map[string]interface{}{}
account["id"] = v account["id"] = v
fmt.Println("GetOnlineList - json: ", v) //fmt.Println("GetOnlineList - json: ", v)
account["uid"], _ = internal.GetStringIdToUid(ctx, fmt.Sprint(v)) account["uid"], _ = internal.GetStringIdToUid(ctx, fmt.Sprint(v))
res.Onlines = append(res.Onlines, account) res.Onlines = append(res.Onlines, account)
if len(res.Onlines) >= 50 { if len(res.Onlines) >= 50 {

Loading…
Cancel
Save