我一直使用ASP.NET Boilerplate作为我的应用程序的模板作为起点。我正在修改登录过程以实施2FA。但是,我不确定将这些配置设置放在何处。在将.NET MVC与.NET Identity结合使用的先前应用程序中,我能够在继承ApplicationUserManager
的{{1}}类中做到这一点。这就是我配置的方式:
UserManager
在ASP.NET Boilerplate中,有许多功能强大的工具和许多接口可以实现以协助登录过程。我看过一个讨论过disable lockout feature的GitHub帖子,看来我应该能够将public class ApplicationUserManager : UserManager<User>
{
public ApplicationUserManager(IUserStore<User> store) : base(store)
{
}
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
var manager = new ApplicationUserManager(new UserStore<User>(context.Get<Db>()));
// Configure validation logic for usernames
manager.UserValidator = new UserValidator<User>(manager)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = true
};
// Configure user lockout defaults
manager.UserLockoutEnabledByDefault = true;
manager.MaxFailedAccessAttemptsBeforeLockout = 5;
manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromDays(365*500);
manager.RegisterTwoFactorProvider("EmailCode", new EmailTokenProvider<User>()
{
Subject = "Security Code",
BodyFormat = "Your security code is: {0}"
});
manager.EmailService = new EmailService();
var dataProtectionProvider = options.DataProtectionProvider;
if (dataProtectionProvider != null)
{
manager.UserTokenProvider = new DataProtectorTokenProvider<User>(dataProtectionProvider.Create("ASP.NET Identity"));
}
return manager;
}
}
和SettingsManager
的{{1}}数据库选项添加到我的数据库中,但是我我不确定,只要将它们添加到数据库中,它们就会自动神奇地被拾取,特别是如果我没有正确命名它们的时候。我已经可以在此处使用MaxFailedAccessAttempts
的一类常量值了:
DefaultLockoutTimeSpan
EmailSettings
项目中还有一个类-public void Create()
{
// Emailing
AddSettingIfNotExists(EmailSettingNames.DefaultFromAddress, "developer@developer.com");
AddSettingIfNotExists(EmailSettingNames.DefaultFromDisplayName, "do not reply");
AddSettingIfNotExists(EmailSettingNames.Smtp.Host, "smtp.gmail.com");
AddSettingIfNotExists(EmailSettingNames.Smtp.Port, "587");
AddSettingIfNotExists(EmailSettingNames.Smtp.UserName, "developer@developer.com");
AddSettingIfNotExists(EmailSettingNames.Smtp.Password, "SomePassword");
AddSettingIfNotExists(EmailSettingNames.Smtp.EnableSsl, "true");
AddSettingIfNotExists(EmailSettingNames.Smtp.UseDefaultCredentials, "false");
// Languages
AddSettingIfNotExists(LocalizationSettingNames.DefaultLanguage, "en");
}
,其中包含Core
的值。我想我可以在那里添加常量值。但是,如果这样做,是否需要将这些设置命名为与AppSettingNames
属性所要查找的名称相同?
答案 0 :(得分:0)
相关常量在AbpZeroSettingNames
中。
// DefaultLockoutTimeSpan
AddSettingIfNotExists(
AbpZeroSettingNames.UserManagement.UserLockOut.DefaultAccountLockoutSeconds,
int.MaxValue.ToString() // 2,147,483,647 seconds, just over 68 years
);
// MaxFailedAccessAttempts
AddSettingIfNotExists(
AbpZeroSettingNames.UserManagement.UserLockOut.MaxFailedAccessAttemptsBeforeLockout,
"5"
);
不幸的是,int.MaxValue
仅在几秒钟内仅允许应用程序一次将用户锁定68年以上,而您以前配置的时间却不到500年。