From 06a9dac99bff32e1b3faa2205b80b13292b7479a Mon Sep 17 00:00:00 2001 From: "Logan.Li" Date: Mon, 14 Sep 2026 21:12:45 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4=20SQLite=20=E4=B8=8D?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E7=9A=84=20CURRENT=5FTIMESTAMP=20=E5=88=97?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=80=BC=EF=BC=8C=E4=BF=AE=E5=A4=8D=E8=BF=81?= =?UTF-8?q?=E7=A7=BB=E5=A4=B1=E8=B4=A5=20crash=20loop?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/model/user.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/backend/internal/model/user.go b/backend/internal/model/user.go index 31c04bd..46fca1b 100644 --- a/backend/internal/model/user.go +++ b/backend/internal/model/user.go @@ -16,11 +16,12 @@ type User struct { Role string `json:"role" gorm:"size:20;default:'admin'"` // 固定 admin,预留扩展 IsActive bool `json:"is_active" gorm:"default:true"` LastLogin *time.Time `json:"last_login,omitempty"` - // 会话失效基线:签发时间早于该值的 JWT 一律拒绝(改密码时刷新为当前时间) // Logan.Li - TokenValidAfter time.Time `json:"-" gorm:"default:CURRENT_TIMESTAMP"` + // 会话失效基线:签发时间早于该值的 JWT 一律拒绝(改密码时刷新为当前时间)。 + // 零值表示未设置过,不拦截旧令牌;SQLite 不允许 ADD COLUMN 带非常量默认值,故不用 DEFAULT CURRENT_TIMESTAMP // Logan.Li + TokenValidAfter time.Time `json:"-"` // 账号级登录防护:连续失败计数与锁定截止时间 // Logan.Li FailedLoginAttempts int `json:"-" gorm:"default:0"` - LockedUntil *time.Time `json:"-" gorm:"default:null"` + LockedUntil *time.Time `json:"-"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` DeletedAt gorm.DeletedAt `json:"deleted_at,omitempty" gorm:"index"`