आप एक उपयोगकर्ता वर्ग बना सकते हैं जिसका आपके मुख्य पुस्तकालय में ASP.NET पहचान से कोई लेना-देना नहीं है।
public class User {
public Guid UserId { get; set; }
public string UserName { get; set; }
public string EmailAddress { get; set; }
public string EmailAddressConfirmed { get; set; }
public string PhoneNumber { get; set; }
public string PhoneNumberConfirmed { get; set; }
public string PasswordHash { get; set; }
public string SecurityStamp { get; set; }
...
public virtual ICollection<Role> Roles { get; set; }
public virtual ICollection<UserClaim> UserClaims { get; set; }
public virtual ICollection<UserLogin> UserLogins { get; set; }
}
यदि आप एंटिटी फ्रेमवर्क का उपयोग कर रहे हैं, तो अपनी संस्थाओं (वैकल्पिक) के लिए एक कॉन्फ़िगरेशन क्लास बनाएं।
internal class UserConfiguration : EntityTypeConfiguration<User>
{
internal UserConfiguration()
{
ToTable("User");
HasKey(x => x.UserId)
.Property(x => x.UserId)
.HasColumnName("UserId")
.HasColumnType("uniqueidentifier")
.IsRequired();
Property(x => x.PasswordHash)
.HasColumnName("PasswordHash")
.HasColumnType("nvarchar")
.IsMaxLength()
.IsOptional();
Property(x => x.SecurityStamp)
.HasColumnName("SecurityStamp")
.HasColumnType("nvarchar")
.IsMaxLength()
.IsOptional();
Property(x => x.UserName)
.HasColumnName("UserName")
.HasColumnType("nvarchar")
.HasMaxLength(256)
.IsRequired();
// EmailAddress, PhoneNumber, ...
HasMany(x => x.Roles)
.WithMany(x => x.Users)
.Map(x =>
{
x.ToTable("UserRole");
x.MapLeftKey("UserId");
x.MapRightKey("RoleId");
});
HasMany(x => x.UserClaims)
.WithRequired(x => x.User)
.HasForeignKey(x => x.UserId);
HasMany(x => x.UserLogins)
.WithRequired(x => x.User)
.HasForeignKey(x => x.UserId);
}
}
आपको भूमिका, उपयोगकर्ता अस्वीकरण और उपयोगकर्तालॉगिन के लिए कक्षाएं भी बनानी होंगी । यदि आप उपरोक्त नामों को पसंद नहीं करते हैं, तो आप उन्हें चुन सकते हैं।
वेब लेयर में, AppUser नामक एक वर्ग बनाएं (या यदि आप चुनते हैं तो दूसरा नाम)। इस वर्ग ASP.NET पहचान को लागू करना चाहिए IUser <TKey> इंटरफेस, जहां TKey (प्राथमिक कुंजी के लिए डेटा प्रकार है Guid ऊपर के उदाहरण में)।
public class AppUser : IUser<Guid>
{
public AppUser()
{
this.Id = Guid.NewGuid();
}
public AppUser(string userName)
: this()
{
this.UserName = userName;
}
public Guid Id { get; set; }
public string UserName { get; set; }
public string EmailAddress { get; set; }
public string EmailAddressConfirmed { get; set; }
public string PhoneNumber { get; set; }
public string PhoneNumberConfirmed { get; set; }
public string PasswordHash { get; set; }
public string SecurityStamp { get; set; }
}
वेब प्रोजेक्ट में UserManager के सभी संदर्भों को UserManager <AppUser, Guide> में बदलें ।
अंत में, अपना खुद का यूजरस्टोर बनाएं । अनिवार्य रूप से, कस्टम उपयोगकर्तास्टोर AppUser ऑब्जेक्ट में ले जाएगा , इसे उपयोगकर्ता इकाई ऑब्जेक्ट में कनवर्ट करेगा , फिर इसे बनाए रखें । इन विधियों में से एक का एक उदाहरण नीचे दिखाया गया है:
public class UserStore :
IUserLoginStore<AppUser, Guid>,
IUserClaimStore<AppUser, Guid>,
IUserRoleStore<AppUser, Guid>,
IUserPasswordStore<AppUser, Guid>,
IUserSecurityStampStore<AppUser, Guid>,
IUserStore<AppUser, Guid>,
IDisposable
{
private User MapFromAppUser(AppUser appUser)
{
if (appUser == null)
return null;
var userEntity = new User();
PopulateUser(userEntity, appUser);
return userEntity;
}
private void PopulateUser(User user, AppUser appUser)
{
user.UserId = appUser.Id;
user.UserName = appUser.UserName;
user.EmailAddress = appUser.EmailAddress;
user.EmailAddressConfirmed = appUser.EmailAddressConfirmed;
user.PhoneNumber = appUser.PhoneNumber;
user.PhoneNumberConfirmed = appUser.PhoneNumberConfirmed;
user.PasswordHash = appUser.PasswordHash;
user.SecurityStamp = appUser.SecurityStamp;
// First name, last name, ...
}
#region IUserStore<AppUser, Guid> Members
public Task CreateAsync(AppUser appUser)
{
if (appUser == null)
throw new ArgumentNullException("appUser");
var userEntity = MapFromAppUser(appUser);
// Persist the user entity to database using a data repository.
// I'll leave this to you.
}
...
#endregion
}
एक संभावित कार्यान्वयन का पूरा विवरण प्राप्त करने के लिए, यहां क्लिक करें ।
अंत में, यह आपकी पसंद है। इस कार्यान्वयन को बनाए रखने के लिए आपके द्वारा किए जाने वाले प्रयास की मात्रा को मापें, केवल अपने कोर लाइब्रेरी में आइडेंटिटी फ्रेमवर्क को संदर्भित करते हुए। व्यक्तिगत रूप से, मैंने इसे ऊपर वर्णित तरीके से करने के बारे में सोचा, हालांकि, मैंने ऐसा नहीं किया क्योंकि मुझे संभवतः हर बार ASP.NET पहचान फ्रेमवर्क के अद्यतन होने पर अपना कोड बदलना होगा।
उम्मीद है कि यह मदद करता है और आपके सवाल का जवाब देता है!