2015-10-02 8 views
9

Jeśli pracował z Identity 2.0, widziałeś ten kawałek kodu:W jaki sposób ustawia się opcje IdentityFactoryOptions <AppIdentityUserManager>?

 public static AppIdentityUserManager Create(
      IdentityFactoryOptions<AppIdentityUserManager> options, 
      IOwinContext context) 
     { 

      [snip] 

      var dataProtectionProvider = options.DataProtectionProvider; 

      if (dataProtectionProvider != null) 
      { 
       manager.UserTokenProvider = 
        new DataProtectorTokenProvider<AppIdentityUser>(
         dataProtectionProvider.Create("ASP.NET Identity")); 
      } 
      return manager; 
     } 

to zrozumieć. W moich opcjach aplikacji. DataProtectionProvider (oczywiście przekazany jako parametr) ma wartość null. Jak i gdzie jest ten zestaw (lub nie w tym przypadku?) Każde znalezione miejsce zawiera ten dokładny fragment kodu, ale nie zawiera żadnego wyjaśnienia dla ustawienia DataProtectionProvider.

EDYCJA: Czytam DataProtectionProvider in the Identity sample project, który wyjaśnia, co UserTokenProvider ma, ale nie wyjaśnia, jak jest ustawiony w obiekcie IdentityFactoryOptions.

+1

Możliwy duplikat [DataProtectionProvider w projekcie próbki tożsamości] (http://stackoverflow.com/questions/25685252/dataprotectionprovider-in-the-identity-sample-project) –

+0

Nie duplikat, pytanie zostało zmodyfikowane za pomocą powody, dla których w to wierzę. – Duston

Odpowiedz

1

Jest ustawiany po utworzeniu menedżera użytkowników.

Jeśli używasz metody CreatePerOwinContext wewnątrz klasy OWIN Startup, która jest przedłużeniem zdefiniowane w Microsoft.AspNet.Identity.Owin, że przedłużenie tworzy nowy IdentityFactoryOption obiekt i przekazuje go do Func który jest parametrem CreatePerOwinContext.

Możesz zobaczyć szczegóły CreatePerOwinContext w the source code here.

public static IAppBuilder CreatePerOwinContext<T>(this IAppBuilder app, 
    Func<IdentityFactoryOptions<T>, IOwinContext, T> createCallback, 
    Action<IdentityFactoryOptions<T>, T> disposeCallback) where T : class, IDisposable 
{ 
    if (app == null) 
    { 
     throw new ArgumentNullException("app"); 
    } 
    if (createCallback == null) 
    { 
     throw new ArgumentNullException("createCallback"); 
    } 
    if (disposeCallback == null) 
    { 
     throw new ArgumentNullException("disposeCallback"); 
    } 

    app.Use(typeof (IdentityFactoryMiddleware<T, IdentityFactoryOptions<T>>), 
     new IdentityFactoryOptions<T> 
     { 
      DataProtectionProvider = app.GetDataProtectionProvider(), 
      Provider = new IdentityFactoryProvider<T> 
      { 
       OnCreate = createCallback, 
       OnDispose = disposeCallback 
      } 
     }); 
    return app; 
} 

Pamiętaj, że jeśli masz swój własny mechanizm DI w swojej aplikacji, nie trzeba korzystać z podejścia CreatePerOwinContext i drut się utworzenie wszystkich obiektów przez siebie. W ten sposób nie będziesz potrzebować żadnego IdentityFactoryOptions. Możesz po prostu wstrzyknąć IUserStore, DbContext, IDataProtectionProvider i wszystko, czego potrzebujesz, korzystając z dowolnego preferowanego typu DI.