package account import ( model2 "ArmedPolice/app/common/model" "ArmedPolice/app/model" "ArmedPolice/app/service" "ArmedPolice/config" "ArmedPolice/utils" "errors" ) type Instance struct{ *service.Session } type InstanceHandle func(session *service.Session) *Instance type ( InstanceLoginResponse struct { Token string `json:"token"` EffectTime int `json:"effect_time"` WsUrl string `json:"ws_url"` } ) func (c *Instance) Login(account, password, captchaKey, captchaValue, ip string) (interface{}, error) { // 验证验证码 //if pass, _ := handle.NewCaptcha().Validate(&handle.CaptchaImage{Key: captchaKey, Captcha: captchaValue}); !pass { // return nil, errors.New("验证码错误") //} mSysUser := model.NewSysUser() isExist, err := mSysUser.GetByAccountOrMobile(account) if err != nil { return nil, err } else if !isExist { return nil, errors.New("操作错误,该帐号信息不存在") } else if mSysUser.Status != model2.SysUserStatusForNormal { return nil, errors.New("操作错误,该账号已被禁用,请联系管理员") } if !mSysUser.ValidatePassword(password) { return nil, errors.New("操作错误,用户名或密码错误") } if mSysUser.TenantID > 0 { mSysTenant := model.NewSysTenant() var count int64 if err = model2.Count(mSysTenant.SysTenant, &count, model2.NewWhere("id", mSysUser.TenantID)); err != nil { return nil, err } else if count <= 0 { return nil, errors.New("操作错误,当前组织下所有用户已禁止登陆") } } session := service.NewSession() session.UID = mSysUser.UUID key := session.UIDToString() session.Token = utils.JWTEncrypt(config.SettingInfo.TokenEffectTime, map[string]interface{}{ config.TokenForUID: key, }) session.TenantID = mSysUser.TenantID session.Name = mSysUser.Name session.Avatar = mSysUser.Avatar session.Mobile = mSysUser.Mobile session.IsAdmin = mSysUser.IsAdminUser() service.Publish(config.EventForRedisHashProduce, config.RedisKeyForAccount, key, session) service.Publish(config.EventForAccountLoginProduce, session.TenantID, session.UID, ip) return &InstanceLoginResponse{Token: session.Token, EffectTime: config.SettingInfo.TokenEffectTime, WsUrl: config.SystemConfig[config.WsDomain].(string)}, nil //WsUrl: ""}, nil } // Logout 退出请求 func (c *Instance) Logout() error { if c.Session != nil && c.UID > 0 { service.Publish(config.EventForRedisHashDestroy, config.RedisKeyForAccount, utils.UintToString(c.UID)) service.HubMessage.UnregisterHandle(service.NewWebsocket(c.UIDToString(), nil)) } return nil } func NewInstance() InstanceHandle { return func(session *service.Session) *Instance { return &Instance{session} } }