Visual Studio 2013 で MVC 5 アプリケーションを作成し、認証として個人アカウントを選択すると、スキャフォールディングによって ASP Net Identity が自動的に構成されます。ApplicationDbContext
ととともにいくつかのクラスを作成しますApplicationUserManager
。また、これらのクラスを以下のように OWIN コンテキストに登録して、要求ごとに 1 つのインスタンスを使用します。
public void ConfigureAuth(IAppBuilder app)
{
// Configure the db context, user manager and signin manager to use a single instance per request
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
}
基本的にstatic Create
各クラスのメソッドを登録します。この静的メソッドは、そのクラスのインスタンスを作成する責任があります。
質問
1 > static create メソッドを使用したくない場合、以下のアプローチは正しいですか?
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim>
{
public ApplicationDbContext(string connString)
: base(connString)
{
}
}
public void ConfigureAuth(IAppBuilder app)
{
var conString = ConfigurationManager.ConnectionStrings["Myconnection"].ConnectionString
app.CreatePerOwinContext(()=>new ApplicationDbContext(conString));
}
ApplicationUserManager
2>静的 Create メソッドを使用せずに登録するにはどうすればよいですか。(UserValidator、PasswordValidator、UserTokenProvider などを設定する必要があります)のコンストラクター
で Validators と UserTokenProvider を設定する必要がありApplicationUserManager
ますか? 以下のように
public class ApplicationUserManager : UserManager<ApplicationUser, string>
{
public ApplicationUserManager(ApplicationUserStore store)
: base(store)
{
base.UserValidator = new UserValidator<ApplicationUser>(manager)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = true
};
// Configure validation logic for passwords
base.PasswordValidator = new PasswordValidator
{
RequiredLength = 6,
RequireNonLetterOrDigit = true,
RequireDigit = true,
RequireLowercase = true,
RequireUppercase = true,
};
base.EmailService = new EmailService();
//?????????How do I get options.DataProtectionProvider ??????
var dataProtectionProvider = options.DataProtectionProvider;
if (dataProtectionProvider != null)
{
base.UserTokenProvider =
new DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create("ASP.NET Identity"));
}
}
ApplicationUserManager
3>上記のアプローチでは、リクエストごとに単一のインスタンスを作成するようにOWINコンテキストに登録するにはどうすればよいですか? 'ApplicationUserManager
また、必要ApplicationUserStore
とApplicationDbContext
..それらをのコンストラクターに渡すにはどうすればよいApplicationUserManager
ですか?