online.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package monitor_service
  2. import (
  3. "gfast/app/model/admin/user_online"
  4. "gfast/boot"
  5. "gfast/library/service"
  6. "github.com/goflyfox/gtoken/gtoken"
  7. "github.com/gogf/gf/encoding/gjson"
  8. "github.com/gogf/gf/errors/gerror"
  9. "github.com/gogf/gf/frame/g"
  10. "github.com/gogf/gf/os/gcache"
  11. "github.com/gogf/gf/util/gconv"
  12. )
  13. //获取在线用户列表
  14. func GetOnlineListPage(req *user_online.ReqListSearch) (total, page int, list []*user_online.Entity, err error) {
  15. if req.PageNum == 0 {
  16. req.PageNum = 1
  17. }
  18. if req.PageSize == 0 {
  19. req.PageSize = service.AdminPageNum
  20. }
  21. return user_online.GetOnlineListPage(req)
  22. }
  23. //通过token获取登录用户数据
  24. func GetOnlineInfo(token string) g.Map {
  25. uuid, userKey := GetUuidUserKeyByToken(token)
  26. cacheKey := boot.AdminGfToken.CacheKey + userKey
  27. switch boot.AdminGfToken.CacheMode {
  28. case gtoken.CacheModeCache:
  29. userCacheValue := gcache.Get(cacheKey)
  30. if userCacheValue == nil {
  31. return nil
  32. }
  33. return gconv.Map(userCacheValue)
  34. case gtoken.CacheModeRedis:
  35. var userCache g.Map
  36. userCacheJson, err := g.Redis().Do("GET", cacheKey)
  37. if err != nil {
  38. g.Log().Error("[GToken]cache get error", err)
  39. return nil
  40. }
  41. if userCacheJson == nil {
  42. return nil
  43. }
  44. err = gjson.DecodeTo(userCacheJson, &userCache)
  45. if err != nil {
  46. g.Log().Error("[GToken]cache get json error", err)
  47. return nil
  48. }
  49. if uuid != userCache["uuid"] {
  50. return nil
  51. }
  52. return userCache
  53. }
  54. return nil
  55. }
  56. //通过token获取uuid和userKey
  57. func GetUuidUserKeyByToken(token string) (uuid, userKey string) {
  58. decryptToken := boot.AdminGfToken.DecryptToken(token)
  59. if !decryptToken.Success() {
  60. return
  61. }
  62. userKey = decryptToken.GetString("userKey")
  63. uuid = decryptToken.GetString("uuid")
  64. return
  65. }
  66. //强制退出操作
  67. func ForceLogout(ids []int) error {
  68. for _, id := range ids {
  69. entity, err := user_online.GetInfoById(id)
  70. if err != nil {
  71. g.Log().Error(err)
  72. return gerror.New("获取在线用户信息失败")
  73. }
  74. if entity == nil {
  75. continue
  76. }
  77. entity.Delete()
  78. _, userKey := GetUuidUserKeyByToken(entity.Token)
  79. if userKey == "" {
  80. continue
  81. }
  82. userKey = boot.AdminGfToken.CacheKey + userKey
  83. _, err = g.Redis().Do("DEL", userKey)
  84. if err != nil {
  85. return err
  86. }
  87. }
  88. return nil
  89. }