我有多个owin上下文。 1用于登录站点,另一个用于管理系统外部的站点登录,数据将被下推。这两个人之间相互冲突。我想使用“erss表”而不将其加载到owin中,只需管理表。我不想在启动时创建ERSS,因为它们冲突。反正在外面创造它们吗?
启动
public partial class Startup
{
// For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
// For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
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);
app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);
// Configure the db context, user manager and signin manager to use a single instance per request
//app.CreatePerOwinContext(ERSS_ApplicationDbContext.Create);
//app.CreatePerOwinContext<ERSS_ApplicationUserManager>(ERSS_ApplicationUserManager.Create);
////app.CreatePerOwinContext<ERSS_ApplicationSignInManager>(ERSS_ApplicationSignInManager.Create);
//app.CreatePerOwinContext<ERSS_ApplicationRoleManager>(ERSS_ApplicationRoleManager.Create);
// Enable the application to use a cookie to store information for the signed in user
// and to use a cookie to temporarily store information about a user logging in with a third party login provider
// Configure the sign in cookie
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
// Enables the application to validate the security stamp when the user logs in.
// This is a security feature which is used when you change a password or add an external login to your account.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
// Enables the application to temporarily store user information when they are verifying the second factor in the two-factor authentication process.
app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5));
// Enables the application to remember the second login verification factor such as phone or email.
// Once you check this option, your second step of verification during the login process will be remembered on the device where you logged in from.
// This is similar to the RememberMe option when you log in.
app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie);
}
}
IdentityConfig
public class ERSS_ApplicationUserManager : UserManager<ERSS_ApplicationUser>
{
public ERSS_ApplicationUserManager(IUserStore<ERSS_ApplicationUser> store)
: base(store)
{
}
public static ERSS_ApplicationUserManager Create(IdentityFactoryOptions<ERSS_ApplicationUserManager> options, IOwinContext context)
{
var manager = new ERSS_ApplicationUserManager(new UserStore<ERSS_ApplicationUser>(context.Get<ERSS_ApplicationDbContext>()));
// Configure validation logic for usernames
manager.UserValidator = new UserValidator<ERSS_ApplicationUser>(manager)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = true
};
// Configure validation logic for passwords
manager.PasswordValidator = new PasswordValidator
{
RequiredLength = 8,
RequireNonLetterOrDigit = false,
RequireDigit = true,
RequireLowercase = true,
RequireUppercase = true,
};
// Configure user lockout defaults
manager.UserLockoutEnabledByDefault = true;
manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5);
manager.MaxFailedAccessAttemptsBeforeLockout = 5;
// Register two factor authentication providers. This application uses Phone and Emails as a step of receiving a code for verifying the user
// You can write your own provider and plug it in here.
manager.RegisterTwoFactorProvider("Phone Code", new PhoneNumberTokenProvider<ERSS_ApplicationUser>
{
MessageFormat = "Your security code is {0}"
});
manager.RegisterTwoFactorProvider("Email Code", new EmailTokenProvider<ERSS_ApplicationUser>
{
Subject = "Security Code",
BodyFormat = "Your security code is {0}"
});
manager.EmailService = new EmailService();
manager.SmsService = new SmsService();
var dataProtectionProvider = options.DataProtectionProvider;
if (dataProtectionProvider != null)
{
manager.UserTokenProvider =
new DataProtectorTokenProvider<ERSS_ApplicationUser>(dataProtectionProvider.Create("ASP.NET Identity"));
}
return manager;
}
}
public class ERSS_ApplicationRoleManager : RoleManager<IdentityRole>
{
public ERSS_ApplicationRoleManager(IRoleStore<IdentityRole, string> roleStore)
: base(roleStore)
{
}
public static ERSS_ApplicationRoleManager Create(IdentityFactoryOptions<ERSS_ApplicationRoleManager> options, IOwinContext context)
{
return new ERSS_ApplicationRoleManager(new RoleStore<IdentityRole>(context.Get<ERSS_ApplicationDbContext>()));
}
}
我希望能够在我的控制器中创建它
private ERSS_ApplicationRoleManager _roleManager;
public ERSS_ApplicationRoleManager RoleManager
{
get
{
//return _roleManager ?? HttpContext.GetOwinContext().Get<ERSS_ApplicationRoleManager>();
return _roleManager ?? ERSS_ApplicationRoleManager.Create();
}
private set
{
_roleManager = value;
}
}