diff --git a/mirai-core/src/commonMain/kotlin/network/components/SsoProcessor.kt b/mirai-core/src/commonMain/kotlin/network/components/SsoProcessor.kt
index d54c60df6..d240b1b33 100644
--- a/mirai-core/src/commonMain/kotlin/network/components/SsoProcessor.kt
+++ b/mirai-core/src/commonMain/kotlin/network/components/SsoProcessor.kt
@@ -119,18 +119,24 @@ internal class SsoProcessorImpl(
     @Throws(LoginFailedException::class)
     override suspend fun login(handler: NetworkHandler) = withExceptionCollector {
         components[BdhSessionSyncer].loadServerListFromCache()
-        if (client.wLoginSigInfoInitialized) {
-            ssoContext.bot.components[EcdhInitialPublicKeyUpdater].refreshInitialPublicKeyAndApplyECDH()
-            kotlin.runCatching {
-                FastLoginImpl(handler).doLogin()
-            }.onFailure { e ->
-                collectException(e)
+        try {
+            if (client.wLoginSigInfoInitialized) {
+                ssoContext.bot.components[EcdhInitialPublicKeyUpdater].refreshInitialPublicKeyAndApplyECDH()
+                kotlin.runCatching {
+                    FastLoginImpl(handler).doLogin()
+                }.onFailure { e ->
+                    collectException(e)
+                    SlowLoginImpl(handler).doLogin()
+                }
+            } else {
+                client = createClient(ssoContext.bot)
+                ssoContext.bot.components[EcdhInitialPublicKeyUpdater].refreshInitialPublicKeyAndApplyECDH()
                 SlowLoginImpl(handler).doLogin()
             }
-        } else {
-            client = createClient(ssoContext.bot)
-            ssoContext.bot.components[EcdhInitialPublicKeyUpdater].refreshInitialPublicKeyAndApplyECDH()
-            SlowLoginImpl(handler).doLogin()
+        } catch (e: Exception) {
+            // Failed to log in, invalidate secrets.
+            ssoContext.bot.components[AccountSecretsManager].invalidate()
+            throw e
         }
         components[AccountSecretsManager].saveSecrets(ssoContext.account, AccountSecretsImpl(client))
         registerClientOnline(handler)