| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- package middleware
- import (
- "net/http"
- "time"
-
- "easydo-echo_win7/utils"
-
- "github.com/labstack/echo-contrib/session"
- "github.com/labstack/echo/v4"
- )
- // AuthMiddleware 认证中间件
- func AuthMiddleware(next echo.HandlerFunc) echo.HandlerFunc {
- return func(c echo.Context) error {
- sess, _ := session.Get("auth_session", c)
-
- // 检查是否已认证
- if auth, ok := sess.Values["is_authenticated"].(bool); !ok || !auth {
- return c.JSON(http.StatusUnauthorized, utils.ErrorResponse("请先登录", ""))
- }
-
- // 检查会话是否过期(超过7天)
- if loginTime, ok := sess.Values["login_time"].(int64); ok {
- if time.Now().Unix()-loginTime > 7*24*60*60 {
- // 清除过期会话
- sess.Options.MaxAge = -1
- sess.Save(c.Request(), c.Response())
-
- return c.JSON(http.StatusUnauthorized, utils.ErrorResponse("会话已过期,请重新登录", ""))
- }
- }
-
- // 将用户信息存入上下文
- c.Set("user_id", sess.Values["user_id"])
- c.Set("username", sess.Values["username"])
-
- return next(c)
- }
- }
- // AdminMiddleware 管理员中间件
- func AdminMiddleware(next echo.HandlerFunc) echo.HandlerFunc {
- return func(c echo.Context) error {
- role := c.Get("role").(string)
-
- if role != "admin" {
- return c.JSON(http.StatusForbidden, utils.ErrorResponse("权限不足", ""))
- }
-
- return next(c)
- }
- }
|