ASP.NET Identity için Özel Depolama Sağlayıcılarına Genel Bakış

Tom FitzMacken tarafından

ASP.NET Identity, kendi depolama sağlayıcınızı oluşturmanızı ve uygulamayı yeniden çalıştırmadan uygulamanıza takmanızı sağlayan genişletilebilir bir sistemdir. Bu konuda, ASP.NET Identity için özelleştirilmiş bir depolama sağlayıcısının nasıl oluşturulacağı açıklanmaktadır. Kendi depolama sağlayıcınızı oluşturmaya yönelik önemli kavramlar ele alınmaktadır, ancak özel bir depolama sağlayıcısı uygulamaya yönelik adım adım yönergeler değildir.

Özel bir depolama sağlayıcısı uygulama örneği için bkz. özel bir MySQL ASP.NET Identity depolama sağlayıcısı uygulama.

Bu konu ASP.NET Identity 2,0 için güncelleştirildi.

Öğreticide kullanılan yazılım sürümleri

  • Güncelleştirme 2 ile Visual Studio 2013
  • ASP.NET Identity 2

Giriş

Varsayılan olarak, ASP.NET Identity sistem kullanıcı bilgilerini bir SQL Server veritabanında depolar ve veritabanını oluşturmak için Entity Framework Code First kullanır. Birçok uygulama için bu yaklaşım iyi bir sonuç verir. Ancak, Azure Tablo depolaması gibi farklı bir Kalıcılık mekanizması türü kullanmayı tercih edebilir veya varsayılan uygulamadan çok farklı bir yapıya sahip olan veritabanı tablolarına sahip olabilirsiniz. Her iki durumda da, depolama mekanizmanız için özelleştirilmiş bir sağlayıcı yazabilir ve bu sağlayıcıyı uygulamanıza ekleyebilirsiniz.

ASP.NET Identity, Visual Studio 2013 şablonlarının çoğunda varsayılan olarak dahil edilir. ASP.NET Identity güncelleştirmelerini Microsoft ASPNET Identity EntityFramework NuGet paketiile edinebilirsiniz.

Bu konu aşağıdaki bölümleri içermektedir:

Mimariyi anlayın

ASP.NET Identity, Yöneticiler ve depolar adlı sınıflardan oluşur. Yöneticiler, uygulama geliştiricisinin ASP.NET Identity sisteminde Kullanıcı oluşturma gibi işlemleri gerçekleştirmek için kullandığı üst düzey sınıflardır. Depolar, kullanıcılar ve roller gibi varlıkların nasıl kalıcı olduğunu belirten alt düzey sınıflardır. Depolar, kalıcılık mekanizmasıyla yakından ilişkilidir, ancak yöneticiler mağazalardan ayrılır, bu da tüm uygulamayı kesintiye uğratmadan Kalıcılık mekanizmasını değiştirebilirsiniz.

Aşağıdaki diyagramda Web uygulamanızın yöneticileriyle nasıl etkileşim kurduğu ve veri erişim katmanıyla etkileşim kuran bir şekilde nasıl depolandığı gösterilmektedir.

ASP.NET Identity için özelleştirilmiş bir depolama sağlayıcısı oluşturmak için veri kaynağını, veri erişim katmanını ve bu veri erişim katmanıyla etkileşime geçen mağaza sınıflarını oluşturmanız gerekir. Kullanıcı üzerinde veri işlemleri gerçekleştirmek için aynı yönetici API 'Lerini kullanmaya devam edebilirsiniz, ancak artık veriler farklı bir depolama sistemine kaydedilir.

UserManager 'ın veya RoleManager 'ın yeni bir örneğini oluştururken Kullanıcı sınıfının türünü sağladığınızda ve depo sınıfının bir örneğini bağımsız değişken olarak geçirdiğinizde, yönetici sınıflarını özelleştirmeniz gerekmez. Bu yaklaşım özelleştirilmiş sınıflarınızı var olan yapıya eklemenize olanak sağlar. Yeni depolama sağlayıcısını kullanmak için uygulamayı yeniden yapılandırmabölümünde özelleştirilmiş mağaza sınıflarınız Ile UserManager ve roleManager örneğini oluşturmayı öğreneceksiniz.

Depolanan verileri anlayın

Özel bir depolama sağlayıcısı uygulamak için, ASP.NET Identity ile kullanılan veri türlerini anlamanız ve uygulamanızla ilgili olan özelliklerin hangisi olduğuna karar vermelisiniz.

Veri Açıklama
Kullanıcılar Web sitenizin kayıtlı kullanıcıları. Kullanıcı kimliğini ve Kullanıcı adını içerir. Kullanıcılar, sitenize özgü kimlik bilgileriyle oturum açıp (Facebook gibi bir dış siteden kimlik bilgilerini kullanmak yerine) ve Kullanıcı kimlik bilgilerinde herhangi bir şeyin değişip değişmediğini belirtmek için güvenlik damgasına sahip olabileceği karma bir parola içerebilir. Ayrıca, e-posta adresi, telefon numarası, iki öğeli kimlik doğrulamasının etkin olup olmadığını, geçerli başarısız oturum açma sayısını ve bir hesabın kilitlenip kilitlenmediğini de içerebilir.
Kullanıcı Talepleri Kullanıcının kimliğini temsil eden kullanıcı hakkındaki deyimler (veya talepler) kümesi. Kullanıcı kimliğinin, roller aracılığıyla elde edilebileceğinden daha fazla ifadesini etkinleştirebilir.
Kullanıcı oturumu açma Bir kullanıcıya oturum açarken kullanılacak dış kimlik doğrulama sağlayıcısı (Facebook gibi) hakkında bilgiler.
Roller Sitenizin yetkilendirme grupları. Rol kimliği ve rol adı ("admin" veya "Employee" gibi) içerir.

Veri erişim katmanını oluşturma

Bu konuda, kullanacağınız Kalıcılık mekanizması hakkında bilgi sahibi olduğunuz ve bu mekanizma için nasıl varlık oluşturacağınız varsayılmaktadır. Bu konu, depoları veya veri erişim sınıflarını oluşturma hakkında ayrıntılı bilgi sağlamaz; Bunun yerine, ASP.NET Identity çalışırken yapmanız gereken tasarım kararları hakkında bazı öneriler sağlar.

Özelleştirilmiş bir mağaza sağlayıcısı için depoları tasarlarken çok fazla özgürlük vardır. Yalnızca uygulamanızda kullanmayı düşündüğünüz özellikler için depolar oluşturmanız yeterlidir. Örneğin, uygulamanızda roller kullanmıyorsanız, roller veya Kullanıcı rolleri için depolama oluşturmanız gerekmez. Teknolojiniz ve mevcut altyapınız, ASP.NET Identity varsayılan uygulamasından çok farklı bir yapı gerektirebilir. Veri erişim katmanında, havuzlarınızın yapısıyla çalışma mantığını sağlarsınız.

ASP.NET Identity 2,0 için veri depolarının MySQL uygulamasında, bkz. Mysqlidentity. SQL.

Veri erişim katmanında verileri ASP.NET Identity veri kaynağınıza kaydetme mantığını sağlarsınız. Özelleştirilmiş depolama sağlayıcınızla ilgili veri erişim katmanı, Kullanıcı ve rol bilgilerini depolamak için aşağıdaki sınıfları içerebilir.

örneği Açıklama Örnek
Bağlam Kalıcılık mekanizmanıza bağlanmak ve sorguları yürütmek için bilgileri kapsüller. Bu sınıf, veri erişim katmanınıza yönelik bir merkezidir. Diğer veri sınıfları, işlemlerini gerçekleştirmek için bu sınıfın bir örneğini gerektirir. Mağaza sınıflarınızı bu sınıfın bir örneği ile de başlatacaksınız. MySQLDatabase
Kullanıcı depolaması Kullanıcı bilgilerini depolar ve alır (Kullanıcı adı ve parola karması gibi). UserTable (MySQL)
Rol depolama Rol bilgilerini depolar ve alır (rol adı gibi). RoleTable (MySQL)
Userclaim depolaması Kullanıcı talep bilgilerini depolar ve alır (talep türü ve değeri gibi). UserClaimsTable (MySQL)
UserLogins depolaması Kullanıcı oturum açma bilgilerini depolar ve alır (örneğin, bir dış kimlik doğrulama sağlayıcısı). UserLoginsTable (MySQL)
UserRole depolaması Bir kullanıcının hangi rollere atandığını depolar ve alır. UserRoleTable (MySQL)

Yine de, uygulamanızda kullanmayı düşündüğünüz sınıfları uygulamanız gerekir.

Veri erişim sınıflarında, belirli bir kalıcılık mekanizmanız için veri işlemlerini gerçekleştirmek üzere kod sağlarsınız. Örneğin, MySQL uygulamasının içinde UserTable sınıfı, kullanıcılar veritabanı tablosuna yeni bir kayıt eklemek için bir yöntem içerir. _database adlı değişken, MySQLDatabase sınıfının bir örneğidir.

public int Insert(TUser user)
{
    string commandText = @"Insert into Users (UserName, Id, PasswordHash, SecurityStamp,Email,EmailConfirmed,PhoneNumber,PhoneNumberConfirmed, AccessFailedCount,LockoutEnabled,LockoutEndDateUtc,TwoFactorEnabled)
        values (@name, @id, @pwdHash, @SecStamp,@email,@emailconfirmed,@phonenumber,@phonenumberconfirmed,@accesscount,@lockoutenabled,@lockoutenddate,@twofactorenabled)";
    Dictionary<string, object> parameters = new Dictionary<string, object>();
    parameters.Add("@name", user.UserName);
    parameters.Add("@id", user.Id);
    parameters.Add("@pwdHash", user.PasswordHash);
    parameters.Add("@SecStamp", user.SecurityStamp);
    parameters.Add("@email", user.Email);
    parameters.Add("@emailconfirmed", user.EmailConfirmed);
    parameters.Add("@phonenumber", user.PhoneNumber);
    parameters.Add("@phonenumberconfirmed", user.PhoneNumberConfirmed);
    parameters.Add("@accesscount", user.AccessFailedCount);
    parameters.Add("@lockoutenabled", user.LockoutEnabled);
    parameters.Add("@lockoutenddate", user.LockoutEndDateUtc);
    parameters.Add("@twofactorenabled", user.TwoFactorEnabled);

    return _database.Execute(commandText, parameters);
}

Veri erişim sınıflarınızı oluşturduktan sonra, veri erişim katmanındaki belirli yöntemleri çağıran mağaza sınıfları oluşturmanız gerekir.

Kullanıcı sınıfını özelleştirme

Kendi depolama sağlayıcınızı uygularken, Microsoft. asp. net. Identity. EntityFramework ad alanındaki ıdentityuser sınıfına eşdeğer bir Kullanıcı sınıfı oluşturmanız gerekir:

Aşağıdaki diyagramda, oluşturmanız gereken ıdentityuser sınıfı ve bu sınıfta uygulanacak arabirim gösterilmektedir.

IUser<TKey> arabirimi, UserManager 'ın istenen işlemleri gerçekleştirirken çağrı yapmaya çalıştığı özellikleri tanımlar. Arabirim iki özellik içerir-kimlik ve Kullanıcı adı. Iuser<tkey> arabirimi, genel TKey parametresi aracılığıyla Kullanıcı için anahtar türünü belirtmenizi sağlar. ID özelliğinin türü, TKey parametresinin değeriyle eşleşir.

Kimlik çerçevesi, anahtar için bir dize değeri kullanmak istediğinizde, IUser arabirimini de (genel parametre olmadan) sağlar.

Identityuser sınıfı, IUser 'ı uygular ve Web sitenizdeki kullanıcılar için ek özellikler ya da oluşturucular içerir. Aşağıdaki örnek, anahtar için bir tamsayı kullanan bir ıdentityuser sınıfını gösterir. ID alanı, genel parametresinin değeriyle eşleşecek şekilde int olarak ayarlanır.

public class IdentityUser : IUser<int>
{
    public IdentityUser() { ... }
    public IdentityUser(string userName) { ... }
    public int Id { get; set; }
    public string UserName { get; set; }
    // can also define optional properties such as:
    //    PasswordHash
    //    SecurityStamp
    //    Claims
    //    Logins
    //    Roles
}

Tüm uygulama için bkz. ıdentityuser (MySQL).

Kullanıcı deposunu özelleştirme

Ayrıca, kullanıcının tüm veri işlemleri için yöntemler sağlayan bir UserStore sınıfı da oluşturursunuz. Bu sınıf, Microsoft. asp. net. Identity. EntityFramework ad alanındaki userStore<Tuser> sınıfına eşdeğerdir. UserStore sınıfınıza ıuserstore<TUser, TKey> ve isteğe bağlı arabirimlerden herhangi birini uygulayacağınızı uygulatyorsunuzdur. Uygulamanızda sağlamak istediğiniz işlevselliğe göre hangi isteğe bağlı arabirimlerin uygulanacağını seçersiniz.

Aşağıdaki görüntüde, oluşturmanız gereken UserStore sınıfı ve ilgili arabirimler gösterilmektedir.

Visual Studio 'daki varsayılan proje şablonu, isteğe bağlı arabirimlerin çoğunun Kullanıcı deposunda uygulandığını varsayan kodu içerir. Varsayılan şablonu özelleştirilmiş bir kullanıcı deposu ile kullanıyorsanız, Kullanıcı deponuzda isteğe bağlı arabirimler uygulamanız veya uygulanmayan arabirimlerde yöntemi artık çağırmak için şablon kodunu değiştirmeniz gerekir.

Aşağıdaki örnek bir basit kullanıcı deposu sınıfını göstermektedir. Tuser genel parametresi, genellikle tanımladığınız ıdentityuser sınıfı olan Kullanıcı sınıfınızın türünü alır. TKey genel parametresi, Kullanıcı anahtarınızın türünü alır.

public class UserStore : IUserStore<IdentityUser, int>
{
    public UserStore() { ... }
    public UserStore(ExampleStorage database) { ... }
    public Task CreateAsync(IdentityUser user) { ... }
    public Task DeleteAsync(IdentityUser user) { ... }
    public Task<IdentityUser> FindByIdAsync(int userId) { ... }
    public Task<IdentityUser> FindByNameAsync(string userName) { ... }
    public Task UpdateAsync(IdentityUser user) { ... }
    public void Dispose() { ... }
}

Bu örnekte, ExampleDatabase türünde Database adlı bir parametre alan Oluşturucu yalnızca veri erişim sınıfınıza nasıl geçilereceğine ilişkin bir örnektir. Örneğin, MySQL uygulamasında, bu Oluşturucu MySQLDatabase türünde bir parametre alır.

UserStore sınıfınız içinde, işlemleri gerçekleştirmek için oluşturduğunuz veri erişim sınıflarını kullanırsınız. Örneğin, MySQL uygulamasında, UserStore sınıfının yeni bir kayıt eklemek için UserTable örneğini kullanan CreateAsync yöntemi vardır. Usertable nesnesindeki Insert yöntemi, önceki bölümde gösterilen yöntem ile aynıdır.

public Task CreateAsync(IdentityUser user)
{
    if (user == null) {
        throw new ArgumentNullException("user");
    }

    userTable.Insert(user);

    return Task.FromResult<object>(null);
}

Kullanıcı deposunu özelleştirirken uygulanacak arabirimler

Sonraki görüntüde, her arabirimde tanımlanan işlevlerle ilgili daha fazla ayrıntı gösterilmektedir. Tüm isteğe bağlı arabirimler ıuserstore 'dan devralınır.

  • Iuserstore
    Iuserstore<TUser, TKey> arabirimi, Kullanıcı deponuzda uygulamanız gereken tek arabirimdir. Kullanıcıları oluşturma, güncelleştirme, silme ve alma yöntemlerini tanımlar.

  • Iuserclaimstore
    Iuserclaimstore<TUser, TKey> arabirimi Kullanıcı taleplerini etkinleştirmek için Kullanıcı deponuzda uygulamanız gereken yöntemleri tanımlar. Yöntemler içerir veya Kullanıcı taleplerini ekleme, kaldırma ve alma.

  • Iuserloginstore
    Iuserloginstore<TUser, TKey>, dış kimlik doğrulama sağlayıcılarını etkinleştirmek için Kullanıcı deponuzda uygulamanız gereken yöntemleri tanımlar. Kullanıcı oturum açma bilgilerini ekleme, kaldırma ve alma ve oturum açma bilgilerine göre Kullanıcı alma yöntemi gibi yöntemleri içerir.

  • Iuserrolestore
    Iuserrolestore<TKey, tuser>arabirimi, bir kullanıcıyı bir rolle eşlemek için Kullanıcı deponuzda uygulamanız gereken yöntemleri tanımlar. Bir kullanıcının rollerini ekleme, kaldırma ve alma yöntemlerini ve bir rolün bir rolün atanıp atanmadığını denetlemek için bir yöntem içerir.

  • Iuserpasswordstore
    Iuserpasswordstore<TUser, TKey> arabirimi, Karma parolaları kalıcı hale getirmek için Kullanıcı deponuzda uygulamanız gereken yöntemleri tanımlar. Karma parolanın alınması ve ayarlanması için yöntemler ve kullanıcının bir parola ayarlayıp ayarlamadığını belirten bir yöntem içerir.

  • Iusersecuritystampstore
    Iusersecuritystampstore<TUser, TKey> arabirimi kullanıcının hesap bilgilerinin değişip değişmediğini belirten bir güvenlik damgası kullanmak için Kullanıcı deponuzda uygulamanız gereken yöntemleri tanımlar. Bu damga, Kullanıcı parolayı değiştirdiğinde veya oturum açma ekler veya kaldırdığında güncelleştirilir. Güvenlik damgasını alma ve ayarlama yöntemlerini içerir.

  • Iusertwofactorstore
    Iusertwofactorstore<TUser, TKey> arabirimi iki öğeli kimlik doğrulaması uygulamak için uygulamanız gereken yöntemleri tanımlar. Bir kullanıcı için iki öğeli kimlik doğrulamasının etkin olup olmadığını alma ve ayarlama yöntemlerini içerir.

  • Iuserphonenumberstore
    Iuserphonenumberstore<TUser, TKey> arabirimi, Kullanıcı telefon numaralarını depolamak için uygulamanız gereken yöntemleri tanımlar. Telefon numarasını alma ve ayarlama ve telefon numarasının onaylanıp onaylanmayacağı yöntemlerini içerir.

  • Iuseremailstore
    Iuseremailstore<TUser, TKey> arabirimi, kullanıcı e-posta adreslerini depolamak için uygulamanız gereken yöntemleri tanımlar. E-posta adresini alma ve ayarlama yöntemlerini ve e-postanın onaylanıp onaylanmadığını içerir.

  • Iuserlockoutstore
    Iuserlockoutstore<TUser, TKey> arabirimi, bir hesabı kilitleme hakkındaki bilgileri depolamak için uygulamanız gereken yöntemleri tanımlar. Bu, başarısız olan erişim girişimlerinin geçerli sayısını alma, hesabın kilitlenip kilitlenmeyeceğini alma, bitiş tarihini alma ve ayarlama, başarısız girişim sayısını artırma ve başarısız girişim sayısını sıfırlama yöntemlerini içerir.

  • Iqueryableuserstore
    Iqueryableuserstore<TUser, TKey> arabirimi, bir sorgulanabilir kullanıcı deposu sağlamak için uygulamanız gereken üyeleri tanımlar. Bu, sorgulanabilir kullanıcıları tutan bir özelliği içerir.

    Uygulamanızda gerekli olan arabirimleri uygulamanız gerekir; Örneğin, ıuserclaimstore, ıuserloginstore, ıuserrolestore, ıuserpasswordstore ve ıusersecuritystampstore arabirimleri aşağıda gösterildiği gibi.

public class UserStore : IUserStore<IdentityUser, int>,
                         IUserClaimStore<IdentityUser, int>,
                         IUserLoginStore<IdentityUser, int>,
                         IUserRoleStore<IdentityUser, int>,
                         IUserPasswordStore<IdentityUser, int>,
                         IUserSecurityStampStore<IdentityUser, int>
{
    // interface implementations not shown
}

Tüm uygulama için (tüm arabirimler dahil), bkz. userStore (MySQL).

Identityuserclaim, ıdentityuserlogin ve ıdentityuserrole

Microsoft. AspNet. Identity. EntityFramework ad alanı ıdentityuserclaim, ıdentityuserloginve ıdentityuserrole sınıflarının uygulamalarını içerir. Bu özellikleri kullanıyorsanız, bu sınıfların kendi sürümlerinizi oluşturmak ve uygulamanız için özellikleri tanımlamak isteyebilirsiniz. Ancak bazen, temel işlemleri gerçekleştirirken bu varlıkların belleğe yüklenmemesinin (örneğin, bir kullanıcının talebini ekleme veya kaldırma) daha etkilidir. Bunun yerine, arka uç deposu sınıfları bu işlemleri doğrudan veri kaynağında yürütebilir. Örneğin, UserStore. GetClaimsAsync () yöntemi userClaimTable. Findbyuserıd (User) yöntemini çağırabilir. ID) yöntemi doğrudan bu tabloda bir sorgu yürütmek ve talepler listesini döndürmek için yöntem.

public Task<IList<Claim>> GetClaimsAsync(IdentityUser user)
{
    ClaimsIdentity identity = userClaimsTable.FindByUserId(user.Id);
    return Task.FromResult<IList<Claim>>(identity.Claims.ToList());
}

Rol sınıfını özelleştirme

Kendi depolama sağlayıcınızı uygularken, Microsoft. asp. net. Identity. EntityFramework ad alanındaki ıdentityrole sınıfına eşdeğer bir rol sınıfı oluşturmanız gerekir:

Aşağıdaki diyagramda, oluşturmanız gereken ıdentityrole sınıfı ve bu sınıfta uygulanacak arabirim gösterilmektedir.

Irole<TKey> arabirimi, roleManager 'ın istenen işlemleri gerçekleştirirken çağrı yapmaya çalıştığı özellikleri tanımlar. Arabirim iki özellik kimliği ve adı içerir. Irole<tkey> arabirimi, genel TKey parametresi aracılığıyla rolün anahtar türünü belirtmenizi sağlar. ID özelliğinin türü, TKey parametresinin değeriyle eşleşir.

Kimlik çerçevesi, anahtar için bir dize değeri kullanmak istediğinizde ırole arabirimini de (genel parametre olmadan) sağlar.

Aşağıdaki örnek, anahtar için bir tamsayı kullanan bir ıdentityrole sınıfını gösterir. ID alanı, genel parametresinin değeriyle eşleşecek şekilde int olarak ayarlanır.

public class IdentityRole : IRole<int>
{
    public IdentityRole() { ... }
    public IdentityRole(string roleName) { ... }
    public int Id { get; set; }
    public string Name { get; set; }
}

Tüm uygulama için bkz. ıdentityrole (MySQL).

Rol deposunu özelleştirme

Ayrıca, rollerdeki tüm veri işlemlerine yönelik yöntemleri sağlayan bir RoleStore sınıfı oluşturursunuz. Bu sınıf, Microsoft. ASP. NET. Identity. EntityFramework ad alanındaki Rolestore<TRole> sınıfına eşdeğerdir. RoleStore sınıfınıza ırolestore<TRole, tkey> ve isteğe bağlı olarak ıqueryablerolestore<trole, TKey> arabirimini uygulaırsınız.

Aşağıdaki örnekte bir rol deposu sınıfı gösterilmektedir. TRole genel parametresi, genellikle tanımladığınız ıdentityrole sınıfı olan rol sınıfınızın türünü alır. TKey genel parametresi, rol anahtarınızın türünü alır.

public class RoleStore : IRoleStore<IdentityRole, int>
{
    public RoleStore() { ... }
    public RoleStore(ExampleStorage database) { ... }
    public Task CreateAsync(IdentityRole role) { ... }
    public Task DeleteAsync(IdentityRole role) { ... }
    public Task<IdentityRole> FindByIdAsync(int roleId) { ... }
    public Task<IdentityRole> FindByNameAsync(string roleName) { ... }
    public Task UpdateAsync(IdentityRole role) { ... }
    public void Dispose() { ... }
}
  • Irolestore<TRole>
    Irolestore arabirimi, rol deposu sınıfınıza uygulanacak yöntemleri tanımlar. Rol oluşturma, güncelleştirme, silme ve alma yöntemlerini içerir.

  • RoleStore<TRole>
    RoleStore 'u özelleştirmek için, ırolestore arabirimini uygulayan bir sınıf oluşturun. Bu sınıfı yalnızca, sisteminizde roller kullanmak istiyorsanız uygulamanız gerekir. ExampleDatabase türünde Database adlı bir parametre alan Oluşturucu yalnızca veri erişim sınıfınıza nasıl geçilereceğine ilişkin bir örnekdir. Örneğin, MySQL uygulamasında, bu Oluşturucu MySQLDatabase türünde bir parametre alır.

    Tüm uygulama için bkz. Rolestore (MySQL) .

Yeni depolama sağlayıcısını kullanmak için uygulamayı yeniden yapılandırın

Yeni depolama sağlayıcınızı uyguladık. Şimdi, uygulamanızı bu depolama sağlayıcısını kullanacak şekilde yapılandırmanız gerekir. Varsayılan depolama sağlayıcısı projenize dahil edilmiştir, varsayılan sağlayıcıyı kaldırmalı ve sağlayıcınızla değiştirmelisiniz.

MVC projesinde varsayılan depolama sağlayıcısını değiştirme

  1. NuGet Paketlerini Yönet penceresinde Microsoft ASP.NET Identity EntityFramework paketini kaldırın. Bu paketi, Identity. EntityFramework yüklü paketlerinde arayarak bulabilirsiniz.
    , Entity Framework kaldırmak isteyip istemediğiniz sorulur. Uygulamanızın diğer bölümlerinde gerekmiyorsa, bunu kaldırabilirsiniz.

  2. Modeller klasöründeki IdentityModels.cs dosyasında, ApplicationUser ve applicationdbcontext sınıflarını silin veya not edin. MVC uygulamasında tüm IdentityModels.cs dosyasını silebilirsiniz. Web Forms bir uygulamada, iki sınıfı silin, ancak IdentityModels.cs dosyasında da bulunan yardımcı sınıfını kaydettiğinizden emin olun.

  3. Depolama sağlayıcınız ayrı bir projede yer alıyorsa, Web uygulamanızda buna bir başvuru ekleyin.

  4. using Microsoft.AspNet.Identity.EntityFramework; tüm başvuruları, depolama sağlayıcınızın ad alanı için bir using ifadesiyle değiştirin.

  5. Startup.auth.cs sınıfında, configureauth yöntemini uygun bağlamın tek bir örneğini kullanacak şekilde değiştirin.

    public void ConfigureAuth(IAppBuilder app)
    {
        app.CreatePerOwinContext(ExampleStorageContext.Create);
        app.CreatePerOwinContext(ApplicationUserManager.Create);
        ...
    
  6. Uygulama_başlangıç klasöründe, IdentityConfig.cs' yi açın. ApplicationUserManager sınıfında, Create metodunu özelleştirilmiş Kullanıcı deponuzu kullanan bir Kullanıcı Yöneticisi döndürecek şekilde değiştirin.

    public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) 
    {
        var manager = new ApplicationUserManager(new UserStore(context.Get<ExampleStorageContext>()));
        ...
    }
    
  7. Tüm başvuruları, ıdentityuserIle ApplicationUser ile değiştirin.

  8. Varsayılan proje, Kullanıcı sınıfında, IUser arabiriminde tanımlanmayan bazı Üyeler içeriyor; e-posta, PasswordHash ve Generateuserıdentityasync gibi. Kullanıcı sınıfınız bu üyelere sahip değilse, bunları uygulamanız ya da bu üyeleri kullanan kodu değiştirmeniz gerekir.

  9. RoleManager örnekleri oluşturduysanız, bu kodu yeni RoleStore sınıfınızı kullanacak şekilde değiştirin.

    var roleManager = new RoleManager<IdentityRole>(new RoleStore(context.Get<ExampleStorageContext>()));
    
  10. Varsayılan proje, anahtar için bir dize değeri olan bir Kullanıcı sınıfı için tasarlanmıştır. Kullanıcı sınıfınızın anahtar için farklı bir türü (örneğin, bir tamsayı) varsa, projeyi, sizin yazınızla çalışacak şekilde değiştirmeniz gerekir. Bkz. ASP.NET Identity kullanıcılar Için birincil anahtarı değiştirme.

  11. Gerekirse, bağlantı dizesini Web. config dosyasına ekleyin.

Diğer kaynaklar