Search code examples
.net-coretwitteridentityserver4

With IdentityServer4 and Twitter sign in is there a way to connect an existing account?


With .Net Core 3.1 and IdentityServer4, I have successfully set up Twitter sign in.

However, if I already created an account with that same email address (independently of Twitter)... when I click login in with Twitter, it then redirects me back to the identity server External Login page with the following message:

You've successfully authenticated with Twitter. Please enter an email address for this site below and click the Register button to finish logging in.

and a textbox with my twitter email address already filled in: [ [email protected] ]

When I click Register I get the error message:

User name '[email protected]' is already taken.

This makes some sense... but it would be really nice if I had the option of connecting the Twitter login to the existing account... Is there any way to do this?


Solution

  • Its up to you in the ExternalController.Callback method in IdentityServer to handle the mapping to existing accounts and to create new accounts for new users.

    For example, see this code:

            // lookup our user and external provider info
            var (user, provider, providerUserId, claims) = FindUserFromExternalProvider(result);
            if (user == null)
            {
                // this might be where you might initiate a custom workflow for user registration
                // in this sample we don't show how that would be done, as our sample implementation
                // simply auto-provisions new external user
                user = AutoProvisionUser(provider, providerUserId, claims);
            }