修正数据库回收失败后的令牌状态

This commit is contained in:
xuans 2026-09-30 13:15:54 +08:00
parent 42e03242a9
commit d9a4ba9c56
2 changed files with 9 additions and 3 deletions

View File

@ -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("数据库临时凭据回收失败")
}

View File

@ -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]