- OAuth认证系统(Gitea + Lua扩展) - Git自动化操作(本地/SSH远程) - 实时进度WebSocket推送 - 现代化Tab界面UI - Cobra CLI命令行(init/version/serve) - 完整构建系统(Makefile + Taskfile) - UPX压缩支持(体积减少70%)
43 lines
1.1 KiB
Go
43 lines
1.1 KiB
Go
package middleware
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/gorilla/sessions"
|
|
)
|
|
|
|
var store = sessions.NewCookieStore([]byte("123456"))
|
|
|
|
func GetSession(r *http.Request) (*sessions.Session, error) {
|
|
return store.Get(r, "transit")
|
|
}
|
|
|
|
// RequireLogin 登录验证中间件
|
|
// 检查用户是否已登录,未登录则重定向到OAuth登录页面
|
|
func RequireLogin(next http.Handler) http.Handler {
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
session, err := GetSession(r)
|
|
if err != nil {
|
|
// Session读取失败,保存原始URL后重定向到登录
|
|
session, _ = store.New(r, "transit")
|
|
session.Values["redirect_after_login"] = r.URL.RequestURI()
|
|
session.Save(r, w)
|
|
http.Redirect(w, r, "/oauth/gitea", http.StatusFound)
|
|
return
|
|
}
|
|
|
|
// 检查session中是否有用户信息
|
|
userID := session.Values["uid"]
|
|
if userID == nil {
|
|
// 未登录,保存原始URL后重定向到OAuth登录
|
|
session.Values["redirect_after_login"] = r.URL.RequestURI()
|
|
session.Save(r, w)
|
|
http.Redirect(w, r, "/oauth/gitea", http.StatusFound)
|
|
return
|
|
}
|
|
|
|
// 已登录,继续处理请求
|
|
next.ServeHTTP(w, r)
|
|
})
|
|
}
|