Search code examples
c#asp.netasp.net-coreasp.net-identityidentityserver4

Find the user based on the provider and provider Id in identity server 4.1.0


I am trying to register the login user from Facebook and Google, I am using latest Identity server 4.1.0.

Trying to find the user by provider and provider Id

private async Task<(ApplicationUser user, string provider, string providerUserId, IEnumerable<Claim> claims)> FindUserFromExternalProvider(AuthenticateResult result)
    {
        var externalUser = result.Principal;
        var userIdClaim = externalUser.FindFirst(JwtClaimTypes.Subject) ??
                          externalUser.FindFirst(ClaimTypes.NameIdentifier) ??
                          throw new Exception("Unknown userid");

        // remove the user id claim so we don't include it as an extra claim if/when we provision the user
        var claims = externalUser.Claims.ToList();
        claims.Remove(userIdClaim);

        var provider = result.Properties.Items["scheme"];
        var providerUserId = userIdClaim.Value;

        // find external user
        var user = await _userManager.FindByLoginAsync(provider, providerUserId);
        //var user = _users.FindByExternalProvider(provider, providerUserId);

        return (user, provider, providerUserId, claims);
    }

I can't use the TestUser, how can I get the user info based on the provider and provider Id

// lookup our user and external provider info
            var (user, provider, providerUserId, claims) = await FindUserFromExternalProvider(result);
            if (user == null)
            {
               // SignUp user
                
            }

Solution

  • What you use is one of the sample UIs as part of the quick starts. If you need to use custom userStore in the UI it's up to you to adjust and implement.

    Here are a sample using for ASP.NET Identity: