Я пытаюсь создать сайт с несколькими арендаторами mvc 5, который использует одну базу данных и выделяет арендаторов по схеме на Sql Server. Я начал с шаблона Mvc 5 по умолчанию и обновил ApplicationDBContext, который предоставляется, чтобы взять строку, определяющую схему, которая будет использоваться для этого арендатора.Как обрабатывать аутентификацию в приложении с несколькими арендаторами MVC 5
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
private string _tenantSchema;
public ApplicationDbContext(string tenantSchema)
: base("Dev", throwIfV1Schema: false)
{
_tenantSchema = tenantSchema;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema(_tenantSchema);
base.OnModelCreating(modelBuilder);
}
public static ApplicationDbContext Create(string tenantSchema)
{
return new ApplicationDbContext(tenantSchema);
}
}
А потом в App_Start \ IdentityConfig.cs Я обновил Создать Метод ApplicationUserClass использовать первую часть стоимости Request.Host использовать как tenantSchema как так
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
var tenantSchema = context.Request.Host.Value.Split('.')[0];
var ctx = new ApplicationDbContext(tenantSchema);
var userStore = new UserStore<ApplicationUser>(ctx);
var manager = new ApplicationUserManager(userStore);
так если я должен войти в site1.mysite.dev, он будет аутентифицироваться против таблиц в схеме site1, это sql-сервер.
Когда я запускаю сайт и получаю доступ к нему с использованием подменю site1, он правильно использует схему site1 для аутентификации. Но если я изменил URL-адрес в адресной строке браузера и снова войду в систему, он все равно проверяет схему сайта1.
Как настроить приложение на использование схемы для проверки подлинности для каждого запроса?
Вы отлажено и проверяется, будет ли Create вызываться по каждому запросу? Если да, то на самом деле у tenantSchema есть данные, которые вы ожидаете? Если он не вызывается по каждому запросу, вы неправильно настроили что-то неправильно, пожалуйста, покажите свой Startup.Auth –