修复后台新建/重置密码误触发强制改密

仅部署 bootstrap 首个超级管理员需强制改一次初始密码,
新建管理员与重置密码不再设置 password_must_change。
This commit is contained in:
yml2213
2026-07-16 22:52:32 +08:00
parent 3dfa43d3d0
commit c492a1cc85
@@ -77,13 +77,14 @@ func (r *Repository) Create(ctx context.Context, req CreateAdminRequest) (*Admin
if err != nil { if err != nil {
return nil, err return nil, err
} }
// 仅部署 bootstrap 首个超级管理员会强制改密;后台新建账号不强制。
admin := model.AdminUser{ admin := model.AdminUser{
Username: req.Username, Username: req.Username,
PasswordHash: string(hash), PasswordHash: string(hash),
Nickname: req.Nickname, Nickname: req.Nickname,
Status: "active", Status: "active",
TokenVersion: 1, TokenVersion: 1,
PasswordMustChange: true, PasswordMustChange: false,
} }
if err := r.db.WithContext(ctx).Create(&admin).Error; err != nil { if err := r.db.WithContext(ctx).Create(&admin).Error; err != nil {
return nil, err return nil, err
@@ -201,10 +202,11 @@ func (r *Repository) ResetPassword(ctx context.Context, id uint64, newPwd string
if err != nil { if err != nil {
return err return err
} }
// 管理员重置密码后直接可用,不再二次强制改密(强制改密仅用于 bootstrap 初始账号)。
return r.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error { return r.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
if err := tx.Model(&admin).Updates(map[string]any{ if err := tx.Model(&admin).Updates(map[string]any{
"password_hash": string(hash), "password_hash": string(hash),
"password_must_change": true, "password_must_change": false,
}).Error; err != nil { }).Error; err != nil {
return err return err
} }