72 lines
2.0 KiB
Go
72 lines
2.0 KiB
Go
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 := session.NewManage()
|
|
_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.RedisKeyForAccountManage, uid, _session)
|
|
service.Publish(config.EventForAccountLoginProduce, 0, _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.RedisKeyForAccountManage, utils.UintToString(c.UID))
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func NewAccount() AccountHandle {
|
|
return func(session *session.Manage) *Account {
|
|
return &Account{Manage: session}
|
|
}
|
|
}
|