编辑asp.net核心身份声明而不是添加它们

时间:2017-07-28 05:09:01

标签: c# asp.net-core identity claims asp.net-authorization

我正在为我的asp.net核心mvc网站使用外部登录,当登录完成后,我想将他们用于登录的社交信息(例如用户名,个人资料图片等)存储为用户的声明身份...

所以我在成功登录后在我的帐户控制器中运行这样的代码:

    var authClaim = user.Claims.FirstOrDefault(c => c.ClaimType == authToken.Name);
    if (authClaim == null)
          externalClaims.Add(new Claim(authToken.Name, authToken.Value));
    else
          authClaim.ClaimValue = authToken.Value;

    if (externalClaims.Any())
          await _userManager.AddClaimsAsync(user, externalClaims);

await _userManager.UpdateAsync(user);

然而,当我尝试这样做时,声明表正在复制声明,而不是按照我的预期更新声明,因此每次用户登录时,我会在表中为该用户获取与该声明相同的另一个记录集合最后。

我是否必须删除它们并在每次登录时重新添加它们?如果没有,我如何更新现有的声明而不重复它们?

我在每次登录时都会这样做,以防用户更改了他们的个人资料或其他信息(并确保我拥有最新的令牌)。

我也很好奇为什么我将声明添加到用户的主要身份。用户有一个名为 ExternalClaims 的属性,但它是空的,似乎没有任何方法可以更新它。在我看来,这是一个更好的地方提出这些第三方索赔,但我不能为我的生活找到任何方式来修改它...

无论哪种方式,我确信如果我使用此代码我会遇到同样的问题,那么在登录时删除声明并始终将其添加为新的,或者我应该采用不同的方式做某事的正确方法?

0 个答案:

没有答案