online.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package monitor_service
  2. import (
  3. "gfast/app/model/admin/user_online"
  4. "gfast/boot"
  5. "gfast/library/service"
  6. "github.com/gogf/gf/errors/gerror"
  7. "github.com/gogf/gf/frame/g"
  8. )
  9. //获取在线用户列表
  10. func GetOnlineListPage(req *user_online.ReqListSearch) (total, page int, list []*user_online.Entity, err error) {
  11. if req.PageNum == 0 {
  12. req.PageNum = 1
  13. }
  14. if req.PageSize == 0 {
  15. req.PageSize = service.AdminPageNum
  16. }
  17. return user_online.GetOnlineListPage(req, false)
  18. }
  19. //通过token获取uuid和userKey
  20. func GetUuidUserKeyByToken(token string) (uuid, userKey string) {
  21. decryptToken := boot.AdminGfToken.DecryptToken(token)
  22. if !decryptToken.Success() {
  23. return
  24. }
  25. userKey = decryptToken.GetString("userKey")
  26. uuid = decryptToken.GetString("uuid")
  27. return
  28. }
  29. //强制退出操作
  30. func ForceLogout(ids []int) error {
  31. for _, id := range ids {
  32. entity, err := user_online.GetInfoById(id)
  33. if err != nil {
  34. g.Log().Error(err)
  35. return gerror.New("获取在线用户信息失败")
  36. }
  37. if entity == nil {
  38. continue
  39. }
  40. entity.Delete()
  41. _, userKey := GetUuidUserKeyByToken(entity.Token)
  42. if userKey == "" {
  43. continue
  44. }
  45. userKey = boot.AdminGfToken.CacheKey + userKey
  46. _, err = g.Redis().Do("DEL", userKey)
  47. if err != nil {
  48. return err
  49. }
  50. }
  51. return nil
  52. }