This repository has been archived on 2024-11-28. You can view files and clone it, but cannot push or open issues or pull requests.
Files
schisandra-cloud-album/utils/session.go
landaiqing 0b22d9800c 🎨 update
2024-11-05 17:24:11 +08:00

76 lines
1.7 KiB
Go

package utils
import (
"encoding/gob"
"encoding/json"
"github.com/gin-gonic/gin"
"schisandra-cloud-album/global"
)
// SessionData 返回数据
type SessionData struct {
RefreshToken string `json:"refresh_token"`
UID string `json:"uid"`
}
// SetSession sets session data with key and data
func SetSession(c *gin.Context, key string, data SessionData) error {
gob.Register(SessionData{})
session, err := global.Session.Get(c.Request, key)
if err != nil {
global.LOG.Error("SetSession failed: ", err)
return err
}
jsonData, err := json.Marshal(data)
if err != nil {
global.LOG.Error("SetSession failed: ", err)
return err
}
session.Values[key] = jsonData
err = session.Save(c.Request, c.Writer)
if err != nil {
global.LOG.Error("SetSession failed: ", err)
return err
}
return nil
}
// GetSession gets session data with key
func GetSession(c *gin.Context, key string) SessionData {
session, err := global.Session.Get(c.Request, key)
if err != nil {
global.LOG.Error("GetSession failed: ", err)
return SessionData{}
}
jsonData, ok := session.Values[key]
if !ok {
global.LOG.Error("GetSession failed: ", "key not found")
return SessionData{}
}
data := SessionData{}
err = json.Unmarshal(jsonData.([]byte), &data)
if err != nil {
global.LOG.Error("GetSession failed: ", err)
return SessionData{}
}
return data
}
// DelSession deletes session data with key
func DelSession(c *gin.Context, key string) {
session, err := global.Session.Get(c.Request, key)
if err != nil {
global.LOG.Error("DelSession failed: ", err)
return
}
delete(session.Values, key)
err = session.Save(c.Request, c.Writer)
if err != nil {
global.LOG.Error("DelSession failed: ", err)
return
}
return
}