identity server 4.1.0中根据provider和provider Id查找用户
Find the user based on the provider and provider Id in identity server 4.1.0
我正在尝试从 Facebook 和 Google 注册登录用户,我正在使用最新的身份服务器 4.1.0。
正在尝试通过提供商和提供商 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);
}
我无法使用 TestUser,如何根据提供商和提供商 Id 获取用户信息
// lookup our user and external provider info
var (user, provider, providerUserId, claims) = await FindUserFromExternalProvider(result);
if (user == null)
{
// SignUp user
}
您使用的是示例 UI 之一,作为快速入门的一部分。如果您需要在 UI 中使用自定义 userStore,则由您自行调整和实施。
下面是一个使用 ASP.NET 身份的示例:
我正在尝试从 Facebook 和 Google 注册登录用户,我正在使用最新的身份服务器 4.1.0。
正在尝试通过提供商和提供商 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);
}
我无法使用 TestUser,如何根据提供商和提供商 Id 获取用户信息
// lookup our user and external provider info
var (user, provider, providerUserId, claims) = await FindUserFromExternalProvider(result);
if (user == null)
{
// SignUp user
}
您使用的是示例 UI 之一,作为快速入门的一部分。如果您需要在 UI 中使用自定义 userStore,则由您自行调整和实施。
下面是一个使用 ASP.NET 身份的示例: