diff --git a/backend/internal/bootstrap/database.go b/backend/internal/bootstrap/database.go index c72e90b..d63d060 100644 --- a/backend/internal/bootstrap/database.go +++ b/backend/internal/bootstrap/database.go @@ -215,7 +215,7 @@ func (m *DatabaseVerificationManager) Discard(token string) error { if !ok { return errors.New("数据库验证令牌无效或已经过期") } - if err := m.deleteOrQueueCredential(session.CredentialRef); err != nil { + if err := m.deleteCredential(session.CredentialRef); err != nil { m.restoreSession(token, session) return errors.New("数据库临时凭据回收失败") } diff --git a/backend/internal/bootstrap/database_test.go b/backend/internal/bootstrap/database_test.go index 7c09d23..d60c0b7 100644 --- a/backend/internal/bootstrap/database_test.go +++ b/backend/internal/bootstrap/database_test.go @@ -393,8 +393,14 @@ func TestDatabaseVerificationExpiredCleanupFailureRestoresTokenForRetry(t *testi t.Fatal(err) } manager.now = func() time.Time { return result.ExpiresAt } - if _, err := manager.Check(result.VerificationToken, result.CredentialRef); err != nil { - t.Fatalf("expected failed expiry cleanup to preserve the session for retry: %v", err) + if _, err := manager.Check(result.VerificationToken, result.CredentialRef); err == nil { + t.Fatal("expired token must be rejected even when its credential cleanup fails") + } + manager.mu.Lock() + _, restored := manager.sessions[result.VerificationToken] + manager.mu.Unlock() + if !restored { + t.Fatal("failed expiry cleanup must restore the session for a later retry") } store.mu.Lock() _, retained := store.values[result.CredentialRef]