gorm update
This commit is contained in:
@@ -2,9 +2,12 @@ package session
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"management/internal/erpserver/model/dto"
|
||||
"management/internal/pkg/config"
|
||||
|
||||
"github.com/alexedwards/scs/postgresstore"
|
||||
@@ -12,20 +15,22 @@ import (
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type Session interface {
|
||||
Destroy(ctx context.Context) error
|
||||
LoadAndSave(next http.Handler) http.Handler
|
||||
Put(ctx context.Context, key string, val any)
|
||||
GetBytes(ctx context.Context, key string) []byte
|
||||
Exists(ctx context.Context, key string) bool
|
||||
var ErrNoSession = errors.New("session user not found")
|
||||
|
||||
// Manager 抽象核心会话操作
|
||||
type Manager interface {
|
||||
Load(next http.Handler) http.Handler
|
||||
GetUser(ctx context.Context, key string) (*dto.AuthorizeUser, error)
|
||||
PutUser(ctx context.Context, key string, user *dto.AuthorizeUser) error
|
||||
RenewToken(ctx context.Context) error
|
||||
Destroy(ctx context.Context) error
|
||||
}
|
||||
|
||||
type session struct {
|
||||
sessionManager *scs.SessionManager
|
||||
type SCSSession struct {
|
||||
manager *scs.SessionManager
|
||||
}
|
||||
|
||||
func New(db *gorm.DB, config *config.Config) Session {
|
||||
func NewSCSManager(db *gorm.DB, config *config.Config) (Manager, error) {
|
||||
sessionManager := scs.New()
|
||||
sessionManager.Lifetime = 24 * time.Hour
|
||||
sessionManager.IdleTimeout = 2 * time.Hour
|
||||
@@ -35,7 +40,11 @@ func New(db *gorm.DB, config *config.Config) Session {
|
||||
sessionManager.Cookie.SameSite = http.SameSiteStrictMode
|
||||
sessionManager.Cookie.Secure = config.App.Prod
|
||||
|
||||
sqlDB, _ := db.DB()
|
||||
sqlDB, err := db.DB()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// postgres
|
||||
// github.com/alexedwards/scs/postgresstore
|
||||
sessionManager.Store = postgresstore.New(sqlDB)
|
||||
@@ -44,32 +53,39 @@ func New(db *gorm.DB, config *config.Config) Session {
|
||||
// sessionManager.Store = pgxstore.New(pool)
|
||||
// redis
|
||||
// sessionManager.Store = newRedisStore()
|
||||
return &SCSSession{manager: sessionManager}, nil
|
||||
}
|
||||
|
||||
return &session{
|
||||
sessionManager: sessionManager,
|
||||
func (s *SCSSession) Load(next http.Handler) http.Handler {
|
||||
return s.manager.LoadAndSave(next)
|
||||
}
|
||||
|
||||
func (s *SCSSession) GetUser(ctx context.Context, key string) (*dto.AuthorizeUser, error) {
|
||||
data, ok := s.manager.Get(ctx, key).([]byte)
|
||||
if !ok || len(data) == 0 {
|
||||
return nil, ErrNoSession
|
||||
}
|
||||
|
||||
var user dto.AuthorizeUser
|
||||
if err := json.Unmarshal(data, &user); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &user, nil
|
||||
}
|
||||
|
||||
func (s *session) Destroy(ctx context.Context) error {
|
||||
return s.sessionManager.Destroy(ctx)
|
||||
func (s *SCSSession) PutUser(ctx context.Context, key string, user *dto.AuthorizeUser) error {
|
||||
data, err := json.Marshal(user)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
s.manager.Put(ctx, key, data)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *session) LoadAndSave(next http.Handler) http.Handler {
|
||||
return s.sessionManager.LoadAndSave(next)
|
||||
func (s *SCSSession) RenewToken(ctx context.Context) error {
|
||||
return s.manager.RenewToken(ctx)
|
||||
}
|
||||
|
||||
func (s *session) Put(ctx context.Context, key string, val any) {
|
||||
s.sessionManager.Put(ctx, key, val)
|
||||
}
|
||||
|
||||
func (s *session) GetBytes(ctx context.Context, key string) []byte {
|
||||
return s.sessionManager.GetBytes(ctx, key)
|
||||
}
|
||||
|
||||
func (s *session) Exists(ctx context.Context, key string) bool {
|
||||
return s.sessionManager.Exists(ctx, key)
|
||||
}
|
||||
|
||||
func (s *session) RenewToken(ctx context.Context) error {
|
||||
return s.sessionManager.RenewToken(ctx)
|
||||
func (s *SCSSession) Destroy(ctx context.Context) error {
|
||||
return s.manager.Destroy(ctx)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user