jdysya fbed496bed feat(gateway): 增加用户信息并在日志中记录
- 新增 getUserInfo 辅助函数以获取用户信息
- 更新 ServeIndex 和 ServeStatic 函数以使用数据库参数
- 修改 LogAccess 函数以记录用户信息
- 优化 AuthRequired 中间件,对登出操作进行特殊处理
2025-02-16 10:06:32 +08:00

69 lines
1.5 KiB
Go

package main
import (
"net/http"
"gateway/handlers"
"gateway/middleware"
"gateway/models"
"gateway/utils"
"github.com/gin-contrib/sessions"
"github.com/gin-contrib/sessions/cookie"
"github.com/gin-gonic/gin"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/sqlite"
)
func main() {
// 初始化日志
utils.InitLogger()
// 初始化数据库
db, err := gorm.Open("sqlite3", "family.db")
if err != nil {
utils.Logger.Fatalf("数据库连接失败: %v", err)
}
defer db.Close()
db.AutoMigrate(&models.Region{}, &models.User{})
// 初始化 Gin 引擎
r := gin.Default()
// 配置静态文件服务
r.Static("/assets", "./static/assets")
r.LoadHTMLGlob("templates/*")
// 配置 Session 中间件
store := cookie.NewStore([]byte("secret"))
store.Options(sessions.Options{
MaxAge: 86400 * 7,
HttpOnly: true,
Secure: false, // 如果是HTTPS需要设为true
SameSite: http.SameSiteLaxMode, // 允许跨站携带cookie
})
r.Use(sessions.Sessions("mysession", store))
// 路由配置
r.GET("/login", handlers.GetLogin)
r.POST("/login", handlers.PostLogin(db))
r.GET("/register", handlers.GetRegister(db))
r.POST("/register", handlers.PostRegister(db))
// 权限校验中间件
r.Use(middleware.AuthRequired())
// 文档页面路由
r.GET("/", handlers.ServeIndex(db))
// 在权限校验中间件后添加退出路由
r.GET("/logout", handlers.Logout)
// 新增通用静态文件路由(放在其他路由之后)
r.NoRoute(handlers.ServeStatic(db))
// 启动服务
r.Run(":7070")
}