我正在为我的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 的属性,但它是空的,似乎没有任何方法可以更新它。在我看来,这是一个更好的地方提出这些第三方索赔,但我不能为我的生活找到任何方式来修改它...
无论哪种方式,我确信如果我使用此代码我会遇到同样的问题,那么在登录时删除声明并始终将其添加为新的,或者我应该采用不同的方式做某事的正确方法?