forked from lfq7413/tomato
/
SessionTokenCache.go
40 lines (34 loc) · 1.02 KB
/
SessionTokenCache.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package server
import (
"github.com/freeznet/tomato/dependencies/lru"
"github.com/freeznet/tomato/livequery/utils"
)
// SessionTokenCache 缓存 SessionToken 及其对应的用户 ID
type SessionTokenCache struct {
cache *lru.Cache
}
// NewSessionTokenCache ...
func NewSessionTokenCache() *SessionTokenCache {
return &SessionTokenCache{
cache: lru.New(10000),
}
}
// GetUserID 获取用户 ID
func (s *SessionTokenCache) GetUserID(sessionToken string) string {
if v, ok := s.cache.Get(sessionToken); ok {
utils.TLog.Verbose("Fetch userId", v, "of sessionToken", sessionToken, "from Cache")
return v.(string)
}
user, err := userForSessionToken(sessionToken)
if err != nil {
utils.TLog.Error("Can not fetch userId for sessionToken", sessionToken, ", error", err.Error())
return ""
}
utils.TLog.Verbose("Fetch userId", user["objectId"], "of sessionToken", sessionToken, "from Parse")
var userID string
if v, ok := user["objectId"].(string); ok {
userID = v
}
s.cache.Add(sessionToken, userID)
return userID
}