不寻常的函数定义 - 这里发生了什么
unusual function definition - what is happening here
我正在查看身份服务器 4 文档,我遇到了这段代码。
private (TestUser user, string provider, string providerUserId, IEnumerable<Claim> claims) FindUserFromExternalProvider(AuthenticateResult result)
{
var externalUser = result.Principal;
// try to determine the unique id of the external user (issued by the provider)
// the most common claim type for that are the sub claim and the NameIdentifier
// depending on the external provider, some other claim type might be used
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 = _users.FindByExternalProvider(provider, providerUserId);
return (user, provider, providerUserId, claims);
}
而且是这样叫的
var (user, provider, providerUserId, claims) = FindUserFromExternalProvider(result);
我不太明白这里发生了什么。这是什么函数定义用法?
你是说 returned 数据?这是一个 值元组 returned,请参阅此 article 以获取值元组指南。值元组是一种 return 多个参数而无需创建自定义 class.
的方法
该方法尝试在用户通过外部身份验证后在本地数据库中查找用户。
我正在查看身份服务器 4 文档,我遇到了这段代码。
private (TestUser user, string provider, string providerUserId, IEnumerable<Claim> claims) FindUserFromExternalProvider(AuthenticateResult result)
{
var externalUser = result.Principal;
// try to determine the unique id of the external user (issued by the provider)
// the most common claim type for that are the sub claim and the NameIdentifier
// depending on the external provider, some other claim type might be used
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 = _users.FindByExternalProvider(provider, providerUserId);
return (user, provider, providerUserId, claims);
}
而且是这样叫的
var (user, provider, providerUserId, claims) = FindUserFromExternalProvider(result);
我不太明白这里发生了什么。这是什么函数定义用法?
你是说 returned 数据?这是一个 值元组 returned,请参阅此 article 以获取值元组指南。值元组是一种 return 多个参数而无需创建自定义 class.
的方法该方法尝试在用户通过外部身份验证后在本地数据库中查找用户。