package controller import ( model3 "SciencesServer/app/api/manage/model" "SciencesServer/app/handle" "SciencesServer/app/service" "SciencesServer/app/session" "SciencesServer/config" "SciencesServer/utils" "errors" ) type Account struct{ *session.Manage } type AccountHandle func(session *session.Manage) *Account type ( AccountLoginResponse struct { Token string `json:"token"` EffectTime int `json:"effect_time"` } ) // Login 登录请求 func (c *Account) Login(account, password, captchaKey, captchaValue, equipment, ip string) (*AccountLoginResponse, error) { // 验证验证码 if pass, _ := handle.NewCaptcha().Validate(&handle.CaptchaImage{Key: captchaKey, Captcha: captchaValue}); !pass { return nil, errors.New("验证码错误") } mSysUser := model3.NewSysUser() isExist, err := mSysUser.GetByAccountOrMobile(account) if err != nil { return nil, err } else if !isExist { return nil, errors.New("该帐号信息不存在") } if !mSysUser.ValidatePassword(password) { return nil, errors.New("密码错误") } _session := service.NewSession() _session.UID = mSysUser.UUID _session.Name = mSysUser.Name _session.Mobile = mSysUser.Mobile _session.IsAdmin = mSysUser.IsAdminUser() uid := mSysUser.UUIDString() _session.Token = utils.JWTEncrypt(config.SettingInfo.TokenEffectTime, map[string]interface{}{config.TokenForUID: uid}) service.Publish(config.EventForRedisHashProduce, config.RedisKeyForAccount, uid, _session) service.Publish(config.EventForAccountLoginProduce, _session.TenantID, _session.UID, equipment, ip) return &AccountLoginResponse{Token: _session.Token, EffectTime: config.SettingInfo.TokenEffectTime}, nil } // Logout 退出请求 func (c *Account) Logout() error { if c.Manage != nil && c.UID > 0 { service.Publish(config.EventForRedisHashDestroy, config.RedisKeyForAccount, utils.UintToString(c.UID)) } return nil } func NewAccount() AccountHandle { return func(session *session.Manage) *Account { return &Account{Manage: session} } }