76 lines
2.1 KiB
Go
76 lines
2.1 KiB
Go
package account
|
|
|
|
import (
|
|
model2 "ArmedPolice/app/common/model"
|
|
"ArmedPolice/app/handle"
|
|
"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"`
|
|
}
|
|
)
|
|
|
|
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("操作错误,该帐号信息不存在")
|
|
}
|
|
|
|
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.Token = utils.JWTEncrypt(config.SettingInfo.TokenEffectTime, map[string]interface{}{
|
|
config.TokenForUID: mSysUser.UUID,
|
|
})
|
|
session.UID = mSysUser.UUID
|
|
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, session.UIDToString(), session)
|
|
service.Publish(config.EventForAccountLoginProduce, session.TenantID, session.UID, ip)
|
|
|
|
return &InstanceLoginResponse{Token: session.Token, EffectTime: config.SettingInfo.TokenEffectTime}, nil
|
|
}
|
|
|
|
func NewInstance() InstanceHandle {
|
|
return func(session *service.Session) *Instance {
|
|
return &Instance{session}
|
|
}
|
|
}
|