Я новичок в кодировании в целом и, в частности, в ядре Asp.Net, так что извините меня за это.Я действительно надеюсь на некоторую помощь с моим проектом.Я сейчас рву волосы, добавляя разные TimeSpan
для разных пользователей при входе в систему. Скажем, для примера пользователя из company 1 войдите в систему и, надеюсь, получите время сеанса, скажем, 60 минут (времени простоя, но когда пользователь из компания 2 войдет в систему, время сеанса может быть, по умолчанию, 20 мин.
ОБНОВЛЕНИЕ : Моя Цельframework - это .Net Framework 4.6.1 , но код подготовлен для .Net Core 2.1 , и я запускаю пакет Identity v2.1.2
Мой класс startup
выглядит следующим образом:
public class Startup
{
public Startup(IHostingEnvironment env)
{
CultureInfo.CurrentCulture = new CultureInfo("sv-SE");
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
if (env.IsDevelopment())
{
builder.AddUserSecrets<Startup>();
}
builder.AddInMemoryCollection(GetBeanstalkEnvironmentProperties());
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IConfiguration>(Configuration);
// Add framework services.
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("ExternalServerConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.Configure<EmailConfiguration>(Configuration.GetSection("EmailConfiguration"));
services.AddMvc();
// Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
}
Вход в контроллер так же просто, как этот:
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
_logger.LogInformation(1, "User logged in.");
return RedirectToAction("...");
...
И после проверки различных решений и форумовнайденная эта опция для добавления Timespan
в Startup
:
services.Configure<SecurityStampValidatorOptions>(options =>
{
// Add validationinterval E.g how often the stamp is checked.
options.ValidationInterval = TimeSpan.FromSeconds(10);
});
services.AddAuthentication().Services.ConfigureApplicationCookie(options =>
{
// Timespan extension if page is refreshed or navigated. Default is true.
options.SlidingExpiration = true;
// Cookie is valid at minimum 20 min.
options.ExpireTimeSpan = TimeSpan.FromMinutes(20);
});
Это прекрасно работает, но это глобальный способ установки времени сеанса для пользователей и затемприменяются ко всем пользователям.Поэтому я надеюсь, что у кого-то есть хорошее решение, в котором я смогу использовать вышеизложенное и при этом иметь возможность добавлять различные значения здесь options.ExpireTimeSpan = TimeSpan.FromMinutes(20);
в зависимости от предпочтений пользователя, например, к какой компании принадлежит пользователь.
Другие ссылки и что я пробовал до сих пор.
Я пытался выяснить этот один из них, но мне не удалосьдело.Я думаю, мне нужно было бы сначала иметь возможность проверить пользователя на наличие претензий (чтобы увидеть, к какой компании принадлежит пользователь) и, возможно, установить значение для конкретной компании, например company 1 value 60 в Затем в таблице БД затем прочитайте это значение и обновите Timespan
этим значением из БД или более «безобразно», просто жестко закодировав значение в Startup
.Скажем, что пользователь принадлежит определенной компании, которая затем должна иметь определенное значение сеанса или, если не установлено значение по умолчанию, равное 20 мин.Например, в псевдо: (Если user.companyID равен 1, тогда установите options.ExpireTimeSpan = TimeSpan.FromMinutes (60)) и так далее.Моя проблема здесь в том, что, конечно, я не могу получить доступ к этим значениям при запуске, и, вероятно, не должен?
Я также пытался это , но это расширяет куки для клиентской стороны, если я не ошибаюсь и не влияю на время простоя пользователя ?!и он также использует сессию, которую, я думаю, я мог бы добавить, но я не уверен, что это все равно будет хорошо в моей ситуации.
Я старался как можно точнее следовать этой документации.Но фреймворк, похоже, не поддерживает множественные / разные настройки ExpireTimeSpan
.
Здесь - еще один вопрос, на который еще нет ответов, с чем я могу сказать ту же проблему, что и у меня.