picgo/middleware/auth.go

38 lines
1.0 KiB
Go
Raw Normal View History

2024-07-12 20:32:33 +08:00
package middleware
import (
"context"
2024-07-12 20:32:33 +08:00
"net/http"
"picgo/configs"
"picgo/corelib"
"picgo/data"
"picgo/model"
"strings"
2024-07-12 20:32:33 +08:00
)
// LoginMiddleware 登录 // 添加日志中间件到路由器 使用r.Handle("/", LoginMiddleware(http.HandlerFunc(handler)))
func LoginMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
resPath := r.URL.Path
if resPath == "/login" || resPath == "/captcha" || strings.HasPrefix(resPath, "/static") {
next.ServeHTTP(w, r)
}
session, _ := corelib.SessionStore.Get(r, configs.Settings.Server.SessionName)
username, ok := session.Values["username"].(string)
if !ok || username == "" {
http.Redirect(w, r, "/login", http.StatusFound)
return
}
var (
user model.SysUser
err error
)
if user, err = data.SysUserSelectByUsername(username); err != nil {
http.Redirect(w, r, "/login", http.StatusFound)
return
}
ctx := context.WithValue(r.Context(), "username", user.Username)
next.ServeHTTP(w, r.WithContext(ctx))
2024-07-12 20:32:33 +08:00
})
}