Как сгенерировать строку подключения, содержащую идентификатор пользователя, вошедшего в систему

#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 выполняется перед конвейером аутентификации — так что же такое поток аутентификации? Вы не собираетесь разрешать пользователям, не прошедшим проверку подлинности, запрашивать вашу базу данных. Вам всегда нужен идентификатор пользователя.