update context
This commit is contained in:
parent
7bb00b60ac
commit
b37294e622
1 changed files with 17 additions and 19 deletions
32
session.go
32
session.go
|
@ -1,9 +1,6 @@
|
|||
package echosession
|
||||
|
||||
import (
|
||||
"context"
|
||||
"sync"
|
||||
|
||||
"github.com/go-session/session"
|
||||
"github.com/labstack/echo"
|
||||
)
|
||||
|
@ -19,6 +16,8 @@ type (
|
|||
Skipper Skipper
|
||||
// StoreKey keys stored in the context
|
||||
StoreKey string
|
||||
// ManageKey keys stored in the context
|
||||
ManageKey string
|
||||
}
|
||||
)
|
||||
|
||||
|
@ -26,22 +25,14 @@ var (
|
|||
// DefaultConfig is the default Recover middleware config.
|
||||
DefaultConfig = Config{
|
||||
Skipper: func(_ echo.Context) bool { return false },
|
||||
StoreKey: "github.com/go-session/echo-session",
|
||||
StoreKey: "github.com/go-session/echo-session/store",
|
||||
ManageKey: "github.com/go-session/echo-session/manage",
|
||||
}
|
||||
|
||||
once sync.Once
|
||||
internalManager *session.Manager
|
||||
storeKey string
|
||||
manageKey string
|
||||
)
|
||||
|
||||
// get a session manager
|
||||
func manager(opt ...session.Option) *session.Manager {
|
||||
once.Do(func() {
|
||||
internalManager = session.NewManager(opt...)
|
||||
})
|
||||
return internalManager
|
||||
}
|
||||
|
||||
// New create a session middleware
|
||||
func New(opt ...session.Option) echo.MiddlewareFunc {
|
||||
return NewWithConfig(DefaultConfig, opt...)
|
||||
|
@ -53,18 +44,25 @@ func NewWithConfig(config Config, opt ...session.Option) echo.MiddlewareFunc {
|
|||
config.Skipper = DefaultConfig.Skipper
|
||||
}
|
||||
|
||||
manageKey = config.ManageKey
|
||||
if manageKey == "" {
|
||||
manageKey = DefaultConfig.ManageKey
|
||||
}
|
||||
|
||||
storeKey = config.StoreKey
|
||||
if storeKey == "" {
|
||||
storeKey = DefaultConfig.StoreKey
|
||||
}
|
||||
|
||||
manage := session.NewManager(opt...)
|
||||
return func(next echo.HandlerFunc) echo.HandlerFunc {
|
||||
return func(c echo.Context) error {
|
||||
if config.Skipper(c) {
|
||||
return next(c)
|
||||
}
|
||||
|
||||
store, err := manager(opt...).Start(context.Background(), c.Response(), c.Request())
|
||||
c.Set(manageKey, manage)
|
||||
store, err := manage.Start(nil, c.Response(), c.Request())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -81,10 +79,10 @@ func FromContext(ctx echo.Context) session.Store {
|
|||
|
||||
// Destroy a session
|
||||
func Destroy(ctx echo.Context) error {
|
||||
return manager().Destroy(context.Background(), ctx.Response(), ctx.Request())
|
||||
return ctx.Get(manageKey).(*session.Manager).Destroy(nil, ctx.Response(), ctx.Request())
|
||||
}
|
||||
|
||||
// Refresh a session and return to session storage
|
||||
func Refresh(ctx echo.Context) (session.Store, error) {
|
||||
return manager().Refresh(context.Background(), ctx.Response(), ctx.Request())
|
||||
return ctx.Get(manageKey).(*session.Manager).Refresh(nil, ctx.Response(), ctx.Request())
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue