2016-02-06 3 views
4

я Добавьте новое свойство идентичности asp.net 2.2.1 (таблица AspNetUsers) код первогоКак добавить еще Propertys в User.Identity Из таблицы AspNetUsers в идентичности 2.2.1

public class ApplicationUser : IdentityUser 
    { 
     public string AccessToken { get; set; } 

     public string FullName { get; set; } 

     public string ProfilePicture { get; set; } 


     public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) 
     { 
      // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType 
      var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); 
      // Add custom user claims here 

      return userIdentity; 
     } 
    } 

Хорошо, теперь я хотите вызвать профиль Изображение, например, этот код: User.Identity.ProfilePicture;

решение:

Вы должны создать свои собственные классы, реализующие IIdentity и IPrincipal. Затем назначьте их в свой global.asax в OnPostAuthenticate.

Но я не знаю, как это сделать !! как создать свои собственные классы, которые реализуют IIdentity и IPrincipal. Затем назначьте их в свой global.asax в OnPostAuthenticate. Спасибо.

ответ

8

У вас есть 2 варианта (не менее). Во-первых, установите дополнительное свойство в качестве требования при входе пользователя в систему, а затем прочитайте свойство из требования каждый раз, когда вам нужно. Во-вторых, каждый раз, когда вам нужно свойство, прочитайте его из хранилища (БД). Хотя я рекомендую подход на основе требований, который выполняется быстрее, я покажу вам оба способа, используя методы расширения.

Первый подход:

Поместите свой иск в методе GenerateUserIdentityAsync так:

public class ApplicationUser : IdentityUser 
{ 
    // some code here 

    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) 
    { 
     var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); 
     userIdentity.AddClaim(new Claim("ProfilePicture", this.ProfilePicture)); 
     return userIdentity; 
    } 
} 

Затем написать метод расширения легко читать претензии так:

public static class IdentityHelper 
{ 
    public static string GetProfilePicture(this IIdentity identity) 
    { 
     var claimIdent = identity as ClaimsIdentity; 
     return claimIdent != null 
      && claimIdent.HasClaim(c => c.Type == "ProfilePicture") 
      ? claimIdent.FindFirst("ProfilePicture").Value 
      : string.Empty; 
    } 
} 

Теперь вы можете легко использовать свой метод расширения следующим образом:

var pic = User.Identity.GetProfilePicture(); 

Второй подход:

Если вы предпочитаете свежие данные вместо обналичить один в претензии, вы могли бы написать другой метод расширения, чтобы получить свойство от менеджера пользователя:

public static class IdentityHelper 
{ 
    public static string GetFreshProfilePicture(this IIdentity identity) 
    { 
     var userManager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>(); 
     return userManager.FindById(identity.GetUserId()).ProfilePicture; 
    } 
} 

сейчас просто используйте вот так:

var pic = User.Identity.GetFreshProfilePicture(); 

Также не забудьте указать соответствующие названияpac es:

using System.Security.Claims; 
using System.Security.Principal; 
using System.Web; 
using Microsoft.AspNet.Identity.Owin; 
using Microsoft.AspNet.Identity; 
+0

Большое вам спасибо :) – MoHaMmAd

 Смежные вопросы

  • Нет связанных вопросов^_^