{"version":"2.1.269","anchor":"oauth-callback-state-mismatch-no-longer-throws-a-csrf-error","canonical_anchor":"oauth-callback-state-mismatch-no-longer-throws-a-csrf-error","heading":"OAuth callback state-mismatch no longer throws a CSRF error, just ignores the callback","tier":"notice","area":"Auth","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.269\/e\/oauth-callback-state-mismatch-no-longer-throws-a-csrf-error","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.269","markdown":"### OAuth callback state-mismatch no longer throws a CSRF error, just ignores the callback\n\nA mismatched OAuth callback state no longer aborts login as a CSRF attack, it's just ignored now\n\n**What**\n\nWhen logging in and manually pasting an OAuth callback URL, if its `state` parameter doesn't match the login attempt currently in progress, Claude Code used to immediately abort the whole login flow with an error calling it a possible CSRF attack (a type of forged-request attack). Now it logs a quieter debug message saying the callback belongs to a different flow and simply ignores it, continuing to wait for the correct callback instead of throwing an error.\n\n**Why**\n\nThis avoids treating a mismatched callback, which can happen for benign reasons like multiple login attempts in flight, as a security attack that kills the whole login process. Login now continues waiting rather than failing outright in this situation.\n\n- Area: Auth\n- Tier: You'll notice\n- Useful: 2\/5\n- Signal: 1\/5"}