У меня есть 2 приложения под названием ManagementStudio и DocumentStudio.Я собрал ManagementStudio в несколько сборок, на которые ссылается DocumentStudio.
Я использую одну и ту же базу данных для обоих приложений, но они разделены разными схемами.Например, ManagementStudio.ApplicationUsers и DocumentStudio.Documents
В DocumentStudio это мой Startup.cs:
services.AddDbContext<DocumentStudioDbContext>(options => options.UseSqlServer(Environment.GetEnvironmentVariable(DSCASGlobals.DS_ConnectionString)));
string assemblyName = typeof(ManagementStudioDbContext).Namespace;
services.AddDbContext<ManagementStudioDbContext>(options =>
options.UseSqlServer(Environment.GetEnvironmentVariable(DSCASGlobals.DS_ConnectionString),
optionsBuilder =>
optionsBuilder.MigrationsAssembly(assemblyName)
)
);
services.AddMvc().AddJsonOptions(options =>
{
options.SerializerSettings.ContractResolver
= new Newtonsoft.Json.Serialization.DefaultContractResolver();
});
var lockoutOptions = new LockoutOptions()
{
DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5),
MaxFailedAccessAttempts = 5,
};
services.AddDefaultIdentity<ApplicationUsers>(options =>
{
options.Lockout = lockoutOptions;
})
.AddEntityFrameworkStores<ManagementStudioDbContext>();
DocumentStudio использует ManagementStudio для входа в систему, поскольку ManagementStudio содержит все пользовательские данные и модель IdentityUser.
Это имя входа на DocumentStudio, которое аналогично ManagementStudio:
private readonly SignInManager<ApplicationUsers> _signInManager;
private readonly UserManager<ApplicationUsers> _userManager;
private readonly ApplicationUsersData applicationUsersData;
public LoginModel(SignInManager<ApplicationUsers> signInManager, UserManager<ApplicationUsers> userManager, ApplicationUsersData applicationUsersData)
{
_signInManager = signInManager;
_userManager = userManager;
this.applicationUsersData = applicationUsersData;
}
public async Task<IActionResult> OnPostAsync(string returnUrl = null){
var result = await _signInManager.PasswordSignInAsync(Input.UserName, Input.Password, Input.RememberMe, lockoutOnFailure: true);
}
Однако по какой-то причине я получаю ошибку при попытке войти:
Как я могу решить эту проблему?
РЕДАКТИРОВАТЬ:
Добавлены мои ApplicationUsers
public class ApplicationUsers : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime? DateOfBirth { get; set; }
private DateTime createdOn = DateTime.Now;
public DateTime CreatedOn
{
get
{
return (createdOn == DateTime.MinValue) ? DateTime.Now : createdOn;
}
set
{
createdOn = value;
}
}
private DateTime updatedOn = DateTime.Now;
public DateTime UpdatedOn
{
get
{
return (updatedOn == DateTime.MinValue) ? DateTime.Now : updatedOn;
}
set
{
updatedOn = value;
}
}
}
РЕДАКТИРОВАТЬ 2:
Добавлены мои DbContexts
Document Studio
public DocumentStudioDbContext(DbContextOptions<DocumentStudioDbContext> options) : base(options) { }
public DbSet<Documents> Documents { get; set; }
public DbSet<DocumentCategories> DocumentCategories { get; set; }
ManagementStudio
public ManagementStudioDbContext(DbContextOptions<ManagementStudioDbContext> options) : base(options){}
public DbSet<ApplicationUsers> ApplicationUsers { get; set; }
public DbSet<UserRoles> UserRoles { get; set; }
РЕДАКТИРОВАТЬ 3:
Iподозреваю, потому что DocumentStudio ищет своего собственного ApplicationUser.ApplicationUser имеет смысл только для ManagementStudio.Возможно, решение состоит в том, чтобы переопределить парольsigninasync и иметь тот, который вызывает данные ManagementStudios.