forked from free-lancers/electricity_bill_calc_service
		
	enhance(session):基本完成用于控制会话存储的函数。
This commit is contained in:
		
							
								
								
									
										34
									
								
								cache/session.go
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										34
									
								
								cache/session.go
									
									
									
									
										vendored
									
									
								
							| @@ -1,42 +1,22 @@ | |||||||
| package cache | package cache | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"electricity_bill_calc/global" |  | ||||||
| 	"electricity_bill_calc/model" | 	"electricity_bill_calc/model" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
| 	"github.com/go-redis/redis/v8" |  | ||||||
| 	"github.com/vmihailenco/msgpack/v5" |  | ||||||
| ) | ) | ||||||
|  |  | ||||||
| func CacheSession(session *model.Session) error { | func CacheSession(session *model.Session) error { | ||||||
| 	key := fmt.Sprintf("session:%s", session.Token) | 	key := fmt.Sprintf("session:%s", session.Token) | ||||||
| 	serializedSession, err := msgpack.Marshal(session) | 	return Cache(key, session, 2*time.Hour) | ||||||
|  |  | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	validRemains := time.Until(session.ExpiresAt) |  | ||||||
| 	cmd := global.RedisConn.SetNX(global.Ctx, key, serializedSession, validRemains) |  | ||||||
| 	return cmd.Err() |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func RetreiveSession(token string) (*model.Session, error) { | func RetreiveSession(token string) (*model.Session, error) { | ||||||
| 	key := fmt.Sprintf("session:%s", token) | 	key := fmt.Sprintf("session:%s", token) | ||||||
| 	result, err := global.RedisConn.Get(global.Ctx, key).Result() | 	return Retreive[model.Session](key) | ||||||
| 	if err != nil { | } | ||||||
| 		if err == redis.Nil { |  | ||||||
| 			return nil, nil | func HasSession(token string) (bool, error) { | ||||||
| 		} else { | 	key := fmt.Sprintf("session:%s", token) | ||||||
| 			return nil, err | 	return Exists(key) | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	session := &model.Session{} |  | ||||||
| 	err = msgpack.Unmarshal([]byte(result), session) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return nil, err |  | ||||||
| 	} |  | ||||||
| 	return session, nil |  | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user