@@ -1,19 +1,18 @@
|
||||
package routers
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func Api_router(r *gin.RouterGroup) {
|
||||
|
||||
r.GET("/", func(ctx *gin.Context) {
|
||||
ctx.String(http.StatusOK, "api")
|
||||
Return_json(ctx, "api_ok", nil)
|
||||
})
|
||||
|
||||
v1_api := r.Group("/v1/")
|
||||
{
|
||||
V1_time_api(v1_api.Group("/time/"))
|
||||
V1_user_api(v1_api.Group("/user/"))
|
||||
V1_file_api(v1_api.Group("/file/"))
|
||||
V1_cookie_api(v1_api.Group("/cookie/"))
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package routers
|
||||
|
||||
import "github.com/gin-gonic/gin"
|
||||
|
||||
func V1_time_api(r *gin.RouterGroup) {
|
||||
r.GET("/now", func(ctx *gin.Context) {
|
||||
|
||||
})
|
||||
|
||||
}
|
||||
@@ -41,6 +41,9 @@ func V1_user_api(r *gin.RouterGroup) {
|
||||
} else {
|
||||
//fmt.Println("用户不存在")
|
||||
models.DB.Create(&newUser) // 传入指针
|
||||
|
||||
//创建info
|
||||
|
||||
Return_json(ctx, "api_ok", nil)
|
||||
}
|
||||
|
||||
@@ -98,8 +101,11 @@ func V1_user_api(r *gin.RouterGroup) {
|
||||
//计算cookie失效时间
|
||||
new_cookie.ExpiresAt = time.Now().Add(time.Duration(models.User_configs["cookie_timeout"].(int)) * time.Second) //计算过期时间
|
||||
new_cookie.SecureFlag = models.Wed_configs.Tls
|
||||
ctx.SetCookie("user", cookie, cookie_time, "/", models.Wed_configs.Host, models.Wed_configs.Tls, true)
|
||||
|
||||
//发送到前端
|
||||
ctx.SetCookie("user", cookie, cookie_time, "/", models.Wed_configs.Host, models.Wed_configs.Tls, true)
|
||||
ctx.Set("cookie", new_cookie)
|
||||
//写到数据库
|
||||
models.DB.Create(&new_cookie) // 传入指针
|
||||
|
||||
//获取用户info
|
||||
@@ -138,36 +144,31 @@ func V1_user_api(r *gin.RouterGroup) {
|
||||
|
||||
r.POST("/logout", func(ctx *gin.Context) {
|
||||
//返回前端的数据
|
||||
err_msg = "user_api_error"
|
||||
err_code = Error_code[err_msg]
|
||||
|
||||
//先判断是否已经登录
|
||||
//获取中间件处理的结果
|
||||
is_login, _ := ctx.Get("is_login")
|
||||
_, is_login := ctx.Get("user_info")
|
||||
if is_login == true {
|
||||
//fmt.Println("loged")
|
||||
cookie_vel, _ := ctx.Cookie("user") //这个cookie在中间件已经判断为有效的,否则is_login不可能为true,所以直接在数据库删除应该是安全的
|
||||
cookie_any, _ := ctx.Get("cookie") //这个cookie在中间件已经判断为有效的,否则is_login不可能为true,所以直接在数据库删除应该是安全的
|
||||
//删除数据库里的cookie
|
||||
var cookie models.Cookie
|
||||
cookie.Value = cookie_vel
|
||||
models.DB.Where(&cookie).Delete(&cookie)
|
||||
//删除前端cookie
|
||||
ctx.SetCookie("user", "", -1, "/", models.Wed_configs.Host, models.Wed_configs.Tls, true)
|
||||
if err := mapstructure.Decode(cookie_any, &cookie); err == nil {
|
||||
models.DB.Where(&cookie).Delete(&cookie)
|
||||
//删除前端cookie
|
||||
ctx.SetCookie("user", "", -1, "/", models.Wed_configs.Host, models.Wed_configs.Tls, true)
|
||||
ctx.Set("cookie", nil)
|
||||
|
||||
err_msg = "api_ok"
|
||||
err_code = Error_code[err_msg]
|
||||
Return_json(ctx, "api_ok", nil)
|
||||
} else {
|
||||
Return_json(ctx, "json_error", nil)
|
||||
}
|
||||
|
||||
} else {
|
||||
//fmt.Println("no loged")
|
||||
err_msg = "user_no_sign"
|
||||
err_code = Error_code[err_msg]
|
||||
|
||||
Return_json(ctx, "user_no_sign", nil)
|
||||
}
|
||||
|
||||
ctx.JSON(200, map[string]interface{}{
|
||||
"api": "ok",
|
||||
"err_code": err_code,
|
||||
"err_msg": err_msg,
|
||||
})
|
||||
})
|
||||
|
||||
r.POST("/updata_info", func(ctx *gin.Context) {
|
||||
|
||||
@@ -13,7 +13,6 @@ import (
|
||||
|
||||
func Def_router(r *gin.RouterGroup) {
|
||||
r.Use(func(ctx *gin.Context) {
|
||||
ctx.Set("is_login", false)
|
||||
|
||||
cookie_vel := ""
|
||||
//读取用户cookie,判断用户是否已登录
|
||||
@@ -29,7 +28,7 @@ func Def_router(r *gin.RouterGroup) {
|
||||
}
|
||||
var data_t map[string]interface{}
|
||||
if err = mapstructure.Decode(jsonData["data"], &data_t); err == nil {
|
||||
ctx.Set("data", data_t)
|
||||
ctx.Set("data", &data_t)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -44,20 +43,17 @@ func Def_router(r *gin.RouterGroup) {
|
||||
if cookie.ExpiresAt.After(time.Now()) {
|
||||
// ExpiresAt 在当前时间之后(未过期)
|
||||
//fmt.Println("Cookie 未过期")
|
||||
//cookie有效,说明已经登录,cookie过期时间延长,避免大量写入数据库,先判断还有多久过期,小于一天才刷新
|
||||
// 计算过期时间与当前时间的差值
|
||||
remaining := time.Until(cookie.ExpiresAt) // 直接使用 time.Until
|
||||
|
||||
if remaining < 24*time.Hour {
|
||||
//fmt.Println("剩余时间不足 1 天")
|
||||
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)
|
||||
} else {
|
||||
//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
|
||||
@@ -79,15 +75,15 @@ func Def_router(r *gin.RouterGroup) {
|
||||
user_info.UserID = cookie.UserID
|
||||
models.DB.Create(&user_info) // 传入指针
|
||||
}
|
||||
|
||||
ctx.Set("is_login", true)
|
||||
//写入当前登录的用户信息 传递给下一个组件
|
||||
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 {
|
||||
@@ -97,11 +93,17 @@ func Def_router(r *gin.RouterGroup) {
|
||||
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)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -4,10 +4,19 @@ import "github.com/gin-gonic/gin"
|
||||
|
||||
func Return_json(ctx *gin.Context, err_msg string, data map[string]interface{}) {
|
||||
var err_code = Error_code[err_msg]
|
||||
ctx.JSON(200, map[string]interface{}{
|
||||
"err_code": err_code,
|
||||
"err_msg": err_msg,
|
||||
"return": data,
|
||||
})
|
||||
return_data := map[string]interface{}{}
|
||||
|
||||
cookie, have_cookie := ctx.Get("cookie")
|
||||
if have_cookie {
|
||||
return_data["cookie"] = cookie
|
||||
}
|
||||
|
||||
return_data["err_code"] = err_code
|
||||
return_data["err_msg"] = err_msg
|
||||
if data != nil {
|
||||
return_data["return"] = data
|
||||
}
|
||||
|
||||
ctx.JSON(200, &return_data)
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user