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), } // 生成jwt jwt, err := token.NewJWT() if err != nil { return nil, errors.New("登陆失败") } // 处理返回值 g := dto.LoginDto(adminUser) // 加载token g.LoadUserDoctor(jwt) return g, nil }