Files
015/backend/middleware/auth.go

41 lines
924 B
Go

package middleware
import (
"github.com/gorilla/sessions"
"github.com/labstack/echo-contrib/session"
"github.com/labstack/echo/v4"
gonanoid "github.com/matoous/go-nanoid/v2"
)
// CustomMiddleware 创建自定义中间件
func AuthMiddleware() echo.MiddlewareFunc {
return func(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
sess, err := session.Get("session", c)
if err != nil {
return err
}
sess.Options = &sessions.Options{
Path: "/",
MaxAge: 86400 * 7,
HttpOnly: true,
}
if sess.Values["auth"] == nil {
id, err := gonanoid.New()
if err != nil {
return err
}
sess.Values["auth"] = id
if err := sess.Save(c.Request(), c.Response()); err != nil {
return err
}
}
cc := c.(*CustomContext)
cc.Auth = sess.Values["auth"]
// 将自定义上下文传递给下一个处理器
return next(cc)
}
}
}