From a10173d98af307bb36ba197f570b57da9b613136 Mon Sep 17 00:00:00 2001 From: kevin Date: Thu, 26 Jun 2025 20:33:42 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E5=87=BA=E7=99=BB=E5=85=A5bug?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gin_ops/main.go | 7 +- gin_ops/routers/api_users.go | 10 +- gin_ops/routers/def_routers.go | 102 ----------------- gin_ops/routers/uses.go | 118 ++++++++++++++++++++ gin_ops/static/dist/js/my_js_func.js | 2 +- gin_ops/templates/footer.html | 161 ++++++++++++++++++--------- gin_ops/templates/setting-my.html | 2 +- gin_ops/templates/sign-in-01.html | 15 +-- 8 files changed, 248 insertions(+), 169 deletions(-) create mode 100644 gin_ops/routers/uses.go diff --git a/gin_ops/main.go b/gin_ops/main.go index 70e5aa4..88de8b0 100644 --- a/gin_ops/main.go +++ b/gin_ops/main.go @@ -86,11 +86,14 @@ func main() { // 自定义 404 页面(需要提前加载模板) r.NoRoute(func(ctx *gin.Context) { - ctx.HTML(404, "error_404.html", gin.H{}) }) - routers.Def_router(r.Group("/")) //分组路由传递到def_routers。go + r.Use(func(ctx *gin.Context) { + routers.Fitst_use(ctx) + }) + routers.Def_router(r.Group("/")) //分组路由传递到def_routers。go + routers.Api_router(r.Group("/api/")) //分组路由传递到api_routers。go var http_port = models.Wed_configs.Host + ":" + models.Wed_configs.Port var gin_port = "0.0.0.0" + ":" + models.Wed_configs.Port diff --git a/gin_ops/routers/api_users.go b/gin_ops/routers/api_users.go index 1d678ee..56f3b91 100644 --- a/gin_ops/routers/api_users.go +++ b/gin_ops/routers/api_users.go @@ -77,6 +77,8 @@ func V1_user_api(r *gin.RouterGroup) { user.Name = newUser.Name if models.DB.Where(&user).First(&user).Error == nil { // 有数据 + fmt.Println(user) + fmt.Println(newUser) if user.Pass == newUser.Pass { //成功登录 @@ -149,7 +151,9 @@ func V1_user_api(r *gin.RouterGroup) { //先判断是否已经登录 //获取中间件处理的结果 - _, is_login := ctx.Get("user_info") + user_info, is_login := ctx.Get("user_info") + fmt.Println(is_login) + fmt.Println(user_info) if is_login == true { //fmt.Println("loged") cookie_any, _ := ctx.Get("cookie") //这个cookie在中间件已经判断为有效的,否则is_login不可能为true,所以直接在数据库删除应该是安全的 @@ -163,11 +167,13 @@ func V1_user_api(r *gin.RouterGroup) { Return_json(ctx, "api_ok", nil) } else { + Return_json(ctx, "json_error", nil) + } } else { - + //ctx.SetCookie("user", "", -1, "/", models.Wed_configs.Host, models.Wed_configs.Tls, true) Return_json(ctx, "user_no_sign", nil) } diff --git a/gin_ops/routers/def_routers.go b/gin_ops/routers/def_routers.go index cb40203..fb53723 100644 --- a/gin_ops/routers/def_routers.go +++ b/gin_ops/routers/def_routers.go @@ -5,113 +5,11 @@ import ( "net/http" "saas/models" "strconv" - "time" "github.com/gin-gonic/gin" - "github.com/mitchellh/mapstructure" ) func Def_router(r *gin.RouterGroup) { - r.Use(func(ctx *gin.Context) { - - cookie_vel := "" - //读取用户cookie,判断用户是否已登录 - cookie_s, _ := ctx.Cookie("user") - cookie_vel = cookie_s - //转换传进来的数据 - var jsonData map[string]interface{} - if err := ctx.ShouldBindJSON(&jsonData); err == nil { - //分离数据 - var cookie_t models.Cookie - if err = mapstructure.Decode(jsonData["cookie"], &cookie_t); err == nil { - cookie_vel = cookie_t.Value - } - var data_t map[string]interface{} - if err = mapstructure.Decode(jsonData["data"], &data_t); err == nil { - ctx.Set("data", &data_t) - } - - } - - //fmt.Println(cookie_vel) - if cookie_vel != "" { - var cookie models.Cookie - cookie.Value = cookie_vel - if models.DB.Where(&cookie).First(&cookie).Error == nil { - // 有数据 - //有cookie,判断cookie有效性 - if cookie.ExpiresAt.After(time.Now()) { - // ExpiresAt 在当前时间之后(未过期) - //fmt.Println("Cookie 未过期") - - //每次调用都更新cookie的最新状态 ,用于计算在线 - var cookie_up models.Cookie - cookie_up.UpdatedAt = time.Now() - cookie_up.ExpiresAt = time.Now().Add(time.Duration(models.User_configs["cookie_timeout"].(int)) * time.Second) //计算过期时间 - models.DB.Model(&models.Cookie{}).Where(&cookie).Updates(&cookie_up) - //更新前端cookie - ctx.SetCookie("user", cookie.Value, models.User_configs["cookie_timeout"].(int), "/", models.Wed_configs.Host, models.Wed_configs.Tls, true) - cookie.UpdatedAt = cookie_up.UpdatedAt - cookie.ExpiresAt = cookie_up.ExpiresAt - ctx.Set("cookie", cookie) - //读取用户权限信息 - var user models.User - user.ID = cookie.UserID - if models.DB.Where(&user).First(&user).Error == nil { - //找到登录权限 - //清除一些重要数据,避免传递的时候泄露 - user.Pass = "" - // 读取用户info - var user_info models.User_info - user_info.UserID = cookie.UserID - if models.DB.Where(&user_info).First(&user_info).Error == nil { - // 有数据 - //fmt.Println(user_info) - - } else { - // 无数据 - //创建一个默认info - user_info.AvatarPath = models.User_configs["def_avatar_path"].(string) - user_info.UserID = cookie.UserID - models.DB.Create(&user_info) // 传入指针 - } - //写入当前登录的用户信息 传递给下一个组件 - ctx.Set("user_info", &user_info) - ctx.Set("user", &user) - } else { - //找不到登录权限?? 可能被封号? - //删除前端cookie - ctx.SetCookie("user", "", -1, "/", models.Wed_configs.Host, models.Wed_configs.Tls, true) - cookie.Value = "" - cookie.ExpiresAt = time.Now() - ctx.Set("cookie", cookie) - } - - } else { - // ExpiresAt 在当前时间之前或等于(已过期) - //fmt.Println("Cookie 已过期") - //删除数据库的cookie - models.DB.Delete(&cookie) - //删除前端cookie - ctx.SetCookie("user", "", -1, "/", models.Wed_configs.Host, models.Wed_configs.Tls, true) - cookie.Value = "" - cookie.ExpiresAt = time.Now() - ctx.Set("cookie", cookie) - } - } else { - //找不到cookie,未登录 - //删除前端cookie - ctx.SetCookie("user", "", -1, "/", models.Wed_configs.Host, models.Wed_configs.Tls, true) - cookie.Value = "" - cookie.ExpiresAt = time.Now() - ctx.Set("cookie", cookie) - } - - } - - }) - - Api_router(r.Group("/api/")) //分组路由传递到api_routers。go //无需权限的页面 r.GET("/", func(ctx *gin.Context) { diff --git a/gin_ops/routers/uses.go b/gin_ops/routers/uses.go new file mode 100644 index 0000000..e746475 --- /dev/null +++ b/gin_ops/routers/uses.go @@ -0,0 +1,118 @@ +package routers + +import ( + "fmt" + "saas/models" + "time" + + "github.com/gin-gonic/gin" + "github.com/mitchellh/mapstructure" +) + +func Fitst_use(ctx *gin.Context) { + cookie_vel := "" + //读取用户cookie,判断用户是否已登录 + cookie_s, is_have_cookie := ctx.Cookie("user") + if is_have_cookie == nil { + cookie_vel = cookie_s + } + + //转换传进来的数据 + var jsonData map[string]interface{} + if err := ctx.ShouldBindJSON(&jsonData); err == nil { + //分离数据 + var cookie_t models.Cookie + if err = mapstructure.Decode(jsonData["cookie"], &cookie_t); err == nil { + if cookie_t.Value != "" { + cookie_vel = cookie_t.Value + } + + } + var data_t map[string]interface{} + if err = mapstructure.Decode(jsonData["data"], &data_t); err == nil { + ctx.Set("data", &data_t) + } + + } + + //fmt.Println(cookie_vel) + if cookie_vel != "" { + var cookie models.Cookie + cookie.Value = cookie_vel + if models.DB.Where(&cookie).First(&cookie).Error == nil { + + // 有数据 + //有cookie,判断cookie有效性 + if cookie.ExpiresAt.After(time.Now()) { + // ExpiresAt 在当前时间之后(未过期) + //fmt.Println("Cookie 未过期") + + //每次调用都更新cookie的最新状态 ,用于计算在线 + var cookie_up models.Cookie + cookie_up.UpdatedAt = time.Now() + cookie_up.ExpiresAt = time.Now().Add(time.Duration(models.User_configs["cookie_timeout"].(int)) * time.Second) //计算过期时间 + models.DB.Model(&models.Cookie{}).Where(&cookie).Updates(&cookie_up) + //更新前端cookie + ctx.SetCookie("user", cookie.Value, models.User_configs["cookie_timeout"].(int), "/", models.Wed_configs.Host, models.Wed_configs.Tls, true) + cookie.UpdatedAt = cookie_up.UpdatedAt + cookie.ExpiresAt = cookie_up.ExpiresAt + ctx.Set("cookie", cookie) + //读取用户权限信息 + var user models.User + user.ID = cookie.UserID + if models.DB.Where(&user).First(&user).Error == nil { + + //找到登录权限 + //清除一些重要数据,避免传递的时候泄露 + user.Pass = "" + // 读取用户info + var user_info models.User_info + user_info.UserID = cookie.UserID + if models.DB.Where(&user_info).First(&user_info).Error == nil { + // 有数据 + //fmt.Println(user_info) + + } else { + // 无数据 + //创建一个默认info + user_info.AvatarPath = models.User_configs["def_avatar_path"].(string) + user_info.UserID = cookie.UserID + models.DB.Create(&user_info) // 传入指针 + } + //写入当前登录的用户信息 传递给下一个组件 + fmt.Println(user_info) + ctx.Set("user_info", &user_info) + ctx.Set("user", &user) + } else { + //找不到登录权限?? 可能被封号? + //删除前端cookie + ctx.SetCookie("user", "", -1, "/", models.Wed_configs.Host, models.Wed_configs.Tls, true) + cookie.Value = "" + cookie.ExpiresAt = time.Now() + ctx.Set("cookie", cookie) + } + + } else { + // ExpiresAt 在当前时间之前或等于(已过期) + //fmt.Println("Cookie 已过期") + //删除数据库的cookie + models.DB.Delete(&cookie) + //删除前端cookie + ctx.SetCookie("user", "", -1, "/", models.Wed_configs.Host, models.Wed_configs.Tls, true) + cookie.Value = "" + cookie.ExpiresAt = time.Now() + ctx.Set("cookie", cookie) + } + + } else { + //找不到cookie,未登录 + //删除前端cookie + ctx.SetCookie("user", "", -1, "/", models.Wed_configs.Host, models.Wed_configs.Tls, true) + cookie.Value = "" + cookie.ExpiresAt = time.Now() + ctx.Set("cookie", cookie) + } + + } + +} diff --git a/gin_ops/static/dist/js/my_js_func.js b/gin_ops/static/dist/js/my_js_func.js index bfbd9eb..5c562ec 100644 --- a/gin_ops/static/dist/js/my_js_func.js +++ b/gin_ops/static/dist/js/my_js_func.js @@ -47,7 +47,7 @@ function post_json(path, json, callback) { }, }) .then((response) => { - console.log(response) + //console.log(response) re_data["statusCode"] = response.status; //载入服务器返回的数据 if (response.data) { diff --git a/gin_ops/templates/footer.html b/gin_ops/templates/footer.html index b61454f..0f5515c 100644 --- a/gin_ops/templates/footer.html +++ b/gin_ops/templates/footer.html @@ -1,13 +1,13 @@ - - - @@ -114,6 +110,27 @@ body { font-feature-settings: "cv03", "cv04", "cv11"; } + + .my_offcanvas_top { + + height: 45px; + border-radius: 5px; + /* 四个角均为圆角 */ + top: 50px; + right: 120px; + left: 120px; + transform: scaleY(0); + transform-origin: top center; + transition: transform 0.4s; + + } + + .my_offcanvas_top.show { + + transform: scaleY(1); + + + } - +