knowledge-api/api/service/AdminUser.go
2024-09-29 16:55:00 +08:00

68 lines
1.4 KiB
Go

package service
import (
"crypto/md5"
"encoding/hex"
"errors"
"knowledge/api/dao"
"knowledge/api/dto"
"knowledge/api/requests"
"knowledge/utils"
"strconv"
)
// AdminUserService 后台用户
type AdminUserService struct {
}
func (r *AdminUserService) Login(req requests.Login) (res *dto.AdminUserDto, err error) {
// 获取用户信息
AdminUserDao := dao.AdminUserDao{}
adminUser, err := AdminUserDao.GetAdminUserFirstByAccess(req.Access)
if err != nil || adminUser == nil {
return nil, errors.New("用户名或密码错误")
}
// 检测用户密码
password := md5.Sum([]byte(req.Password + adminUser.Salt))
// 将哈希值转换为16进制字符串
passwordString := hex.EncodeToString(password[:])
if passwordString != adminUser.Password {
return nil, errors.New("用户名或密码错误")
}
// 检测用户状态
if adminUser.IsDeleted == 1 {
return nil, errors.New("非法用户")
}
if adminUser.IsDisabled == 1 {
return nil, errors.New("您的账号已被禁用,请联系管理员处理")
}
// 检测用户状态
if adminUser.Status != 1 {
return nil, errors.New("您的账号已被禁用,请联系管理员处理")
}
token := &utils.Token{
UserId: strconv.FormatInt(adminUser.UserId, 10),
Client: 2,
}
// 生成jwt
jwt, err := token.NewJWT(0)
if err != nil {
return nil, errors.New("登陆失败")
}
// 处理返回值
g := dto.LoginDto(adminUser)
// 加载token
g.LoadUserDoctor(jwt)
return g, nil
}