feat:完善项目
This commit is contained in:
75
app/controller/account/instance.go
Normal file
75
app/controller/account/instance.go
Normal file
@ -0,0 +1,75 @@
|
||||
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}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user