登出登入bug修复
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user