2015-05-21 2 views
0

я Попробуйте обновить требования пользователей в моей службе и в первом я должен удалить претензий, как это:не может удалить претензии пользователя в осины Идентичность

var userClaimCollection = this.AppUserManager.GetClaims(user.Id); 
var toRemove = new List<Claim>(); 
foreach (var claim in userClaimCollection) 
{ 
     if (claim.Type == group_role) 
     { 
      toRemove.Add(claim);      
     } 
} 
foreach(var t in toRemove) 
{ 
    Claim c = new Claim(group_role, t.Value); 
    this.AppUserManager.RemoveClaim(user.Id, c); 
} 

но RemoveClaim(user.Id,c) я получаю Collection was modified; enumeration operation may not execute ошибку.
что я действительно делаю неправильно?

ответ

0

В конце я нашел свою проблему, которая была Identity 2.2.0, и после обновления до Identity 2.2.1 моя проблема решена.
Я нашел свой ответ here

1

У меня есть исправление для этого. Просто использование 2.2.1 не работало для меня. Я разрушил свой мозг, поскольку кажется, что было бы легко удалить иск. Но встроенная утилита утилиты RemoveClaim не удалась. У меня был сценарий, когда требование было добавлено дважды. И я для жизни меня не мог избавиться от дублирования заявки.

до тех пор, пока я не повторил лишние слова и не использовал TryRemoveClaim().

Пример здесь:

public async Task SignInAsync(ApplicationUser user, bool isPersistent) 
    { 
     AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie); 
     var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie); 

     foreach(Claim c in identity.Claims) 
     { 
      if (c.Type == "FullName" || c.Type == "AcctStatus") 
      { 
       identity.TryRemoveClaim(c); 
      } 
     } 

     identity.AddClaim(new Claim("FullName", user.BF_FullName)); 
     identity.AddClaim(new Claim("AcctStatus", user.BF_AcctStatus)); 
     AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity); 
    } 
1

Для удаления претензий выполнить указанные ниже,

Шаг 1: извлечь претензии на основе идентификатора пользователя

var claims = await manager.GetClaimsAsync(user.Id); 

Шаг 2: Отфильтруйте требуемое требование от выбранного cl целей.

var lastAccessedClaim = claims.FirstOrDefault(t => t.Type == claimType); 

Шаг 3: Затем, в прошлом использование метода removeclaim, чтобы удалить требование для пользователя, как показано ниже.

var resDelete = (lastAccessedClaim == null)? null: await manager.RemoveClaimAsync(user.Id, lastAccessedClaim); 

поместить следующий код, чтобы получить точный результат.

var claims = await manager.GetClaimsAsync(user.Id); 
var lastAccessedClaim = claims.FirstOrDefault(t => t.Type == claimType); 

var resDelete = (lastAccessedClaim == null)? null: await manager.RemoveClaimAsync(user.Id, lastAccessedClaim); 
Смежные вопросы