package logic import ( "admin/admin" "admin/internal/dao" "admin/internal/model" "admin/internal/svc" "admin/validator" "context" "github.com/zeromicro/go-zero/core/logx" "pkg.local/modelbase" "pkg.local/utils" ) type AdminLoginLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger BaseLogic } func NewAdminLoginLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminLoginLogic { return &AdminLoginLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } func (l *AdminLoginLogic) AdminLogin(in *admin.AdminLoginRequest) (*admin.Response, error) { var v validator.LoginValidator if fail := l.checkParams(in, &v); fail != nil { return fail, nil } phone, dErr := utils.DecryptPhone(in.Username) if dErr != nil { l.Logger.Error(dErr) return l.fail(utils.Fail), nil } var info dao.Admin w := modelbase.Params{Eq: map[string]string{"phone": phone}} modelObj := model.AdminModel{}.Init() err := modelObj.GetOne(w, &info) if err != nil { l.Logger.Error(err) return l.fail(utils.Fail), nil } if info.Id < utils.NumberOne { return l.fail(utils.ErrorNotFund), nil } pwd := utils.GetSaltPassword(info.Salt, in.Password) eq := utils.EqualsPassword(pwd, info.Password) if !eq { return l.fail(utils.ErrorPwdError), nil } data := dao.JwtInfo{ Id: info.Id, Name: info.Name, Email: info.Email, Phone: info.Phone, Avatar: info.Avatar, Roles: info.Roles, LastTime: utils.Now(), } retData := dao.Token{ Token: utils.MD5Encrypt(data.Phone + utils.Now().String()), } l.setLogin(retData.Token, data) return l.ok(retData), nil } func (l *AdminLoginLogic) setLogin(token string, data dao.JwtInfo) { //duration := utils.GetConfigInt("base.login_out_time") //if data.Time > utils.NumberZero { // duration = int(time.Minute * time.Duration(int64(data.Time))) //} //redisKey := utils.GetLoginKey(utils.LoginUser, token) //userStr, _ := jsoniter.Marshal(data) //redis.New().Set(redisKey, string(userStr), duration).Result() //oldAuth, oldErr := utils.Redis.HGet(utils.GetRedisKey(utils.LoginUserKey), strconv.Itoa(data.Id)).Result() //if oldErr == nil { // utils.Redis.Del(utils.GetRedisKey(utils.LoginUser + oldAuth)).Result() //} //utils.Redis.HSet(utils.GetRedisKey(utils.LoginUserKey), strconv.Itoa(data.Id), token).Result() }