Needing a password, a code from an SMS, and a code from another email account feels like a pretty excessive default. It should have been optional imo. Eitherway, I think there's a pretty big flaw in your implementation
Consider this example:
- Email 1 is linked to Email 2.
- 2FA is turned on for both
- I forget my password for Email 1 so request a reset link.
- You ask me for a code from an SMS. Fine. I set that up.
- You then ask me for a code from Email 2, which is pretty annoying as this was automatically added as a factor in 2FA.
And here's the problem: When I log in to Email 2 to retrieve the 2FA code for Email 1 it asks me for an SMS code and a code from Email 1, the account I'm trying to reset the password for. Email 1 added Email 2 as a factor automatically, simply because the accounts were linked, and Email 2 added Email 1 as a factor for the same reason.
As far as I can see this is a circular process that you cannot complete if you're fully logged out of one account. The only reason this hasn't locked me out permanently is that I tend to be logged in to Email 1 on multiple devices. This is by chance.
I'm happy to be corrected, but this seems flawed.
Nick