The way we do it at VITY is that we base everything off of the email address, first and foremost. So, when a user registers, and we get their email, everything afterwards uses that specific email.
For example, say you logged in with Twitter first. And since Twitter doesn’t actually provide an email, you enter your email address during the signup process. So we have your email.
Now, the next time you come to the site, you want to log in with Facebook. So you do. And if your confirmed email stored on Facebook matches the email we have stored, we’ll let you log in as that user. Since we trust Facebook to have validated that email. Which they do.
But, let’s say your Facebook email DOESN’T match what we have; in that case we assume you’re a new user and register you as a new user. But that can cause problems, if, for example, it IS the same person, but the two accounts have separate email addresses.
So. To get around THAT, we make it so once you’re already signed up you have the ability to link you other social accounts as a signed in member. And once you’re a signed in member, we now trust that your social link is actually your social account regardless of email.
That said, yeah, kind of a PITA to implement (I’m the developer), but it’s been the most effective path to date (we’ve found anyway).
Hope that helps.