#asp.net #asp.net-core #entity-framework-core
#asp.net #asp.net-core #entity-framework-core
Вопрос:
Как я могу получить идентификатор пользователя, вошедшего в систему, в классе контекста данных? Идентификатор пользователя всегда равен нулю, потому что конструктор DbContext выполняется перед конвейером аутентификации
Мне нужно установить строку подключения в соответствии с идентификатором пользователя. Как я могу это сделать?
public class Context : DbContext
{
private readonly IHttpContextAccessor httpContextAccessor;
public Context(DbContextOptions<Context> options, IHttpContextAccessor httpContextAccessor) : base(options)
{
this.httpContextAccessor = httpContextAccessor;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
string userId = "";
if (httpContextAccessor.HttpContext.User.Identity.IsAuthenticated)
{
userId = httpContextAccessor.HttpContext.User.Identity.Name;
}
optionsBuilder.UseSqlServer($"my connection string;userid={userId}");
base.OnConfiguring(optionsBuilder);
}
}
Комментарии:
1. Может быть, вам нужна точка с запятой перед этим идентификатором пользователя?
2. Эта переменная ConnectionString пуста, это просто для того, чтобы не делиться реальными деталями?
3. Это не важно. проблема в том, чтобы получить идентификатор пользователя в этом методе.
4. Конструктор DbContext выполняется перед конвейером аутентификации — так что же такое поток аутентификации? Вы не собираетесь разрешать пользователям, не прошедшим проверку подлинности, запрашивать вашу базу данных. Вам всегда нужен идентификатор пользователя.