Files

88 lines
2.5 KiB
Go
Raw Normal View History

2021-11-02 16:22:07 +08:00
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"`
2021-11-08 11:09:27 +08:00
WsUrl string `json:"ws_url"`
2021-11-02 16:22:07 +08:00
}
)
func (c *Instance) Login(account, password, captchaKey, captchaValue, ip string) (interface{}, error) {
// 验证验证码
2021-11-08 11:09:27 +08:00
//if pass, _ := handle.NewCaptcha().Validate(&handle.CaptchaImage{Key: captchaKey, Captcha: captchaValue}); !pass {
// return nil, errors.New("验证码错误")
//}
2021-11-02 16:22:07 +08:00
mSysUser := model.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("操作错误,用户名或密码错误")
}
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()
2021-11-04 16:16:57 +08:00
session.UID = mSysUser.UUID
key := session.UIDToString()
2021-11-02 16:22:07 +08:00
session.Token = utils.JWTEncrypt(config.SettingInfo.TokenEffectTime, map[string]interface{}{
2021-11-04 16:16:57 +08:00
config.TokenForUID: key,
2021-11-02 16:22:07 +08:00
})
session.TenantID = mSysUser.TenantID
session.Name = mSysUser.Name
session.Avatar = mSysUser.Avatar
session.Mobile = mSysUser.Mobile
session.IsAdmin = mSysUser.IsAdminUser()
2021-11-04 16:16:57 +08:00
service.Publish(config.EventForRedisHashProduce, config.RedisKeyForAccount, key, session)
2021-11-02 16:22:07 +08:00
service.Publish(config.EventForAccountLoginProduce, session.TenantID, session.UID, ip)
2021-11-08 11:09:27 +08:00
return &InstanceLoginResponse{Token: session.Token, EffectTime: config.SettingInfo.TokenEffectTime,
WsUrl: config.SystemConfig[config.WsDomain].(string)}, nil
2021-11-02 16:22:07 +08:00
}
2021-11-02 17:01:04 +08:00
// Logout 退出请求
func (c *Instance) Logout() error {
if c.UID > 0 {
service.Publish(config.EventForRedisHashDestroy, config.RedisKeyForAccount, utils.UintToString(c.UID))
2021-11-08 11:09:27 +08:00
service.HubMessage.UnregisterHandle(service.NewWebsocket(c.UIDToString(), nil))
2021-11-02 17:01:04 +08:00
}
return nil
}
2021-11-02 16:22:07 +08:00
func NewInstance() InstanceHandle {
return func(session *service.Session) *Instance {
return &Instance{session}
}
}