Привет, ребята, у меня проблема с Аутентификацией Cookie.Когда я запускаю приложение и захожу в систему с помощью следующего кода, все работает нормально, но когда я закрываю свой проект (чтобы добавить код и т. Д.) И запускаю его снова, я должен снова войти в систему.Я использую проверку подлинности с помощью cookie, и я подумал, что система должна запомнить этот cookie и сохранять мой логин после закрытия проекта.Я ошибаюсь?
я использую asp.core 2.2
await HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
principal, new AuthenticationProperties()
{
AllowRefresh = true,
IsPersistent = true,
ExpiresUtc = DateTime.UtcNow.AddDays(7)
});
, вот как я настроил его в классе запуска
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
}).AddCookie(options =>
{
options.LoginPath = new PathString("/Account/LogOn");
options.LogoutPath = new PathString("/Account/LogOut");
options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
options.SessionStore = new MemoryCacheTicketStore();
});
Может быть, это потому, что этот класс MemoryCacheTickerStore?Мне пришлось реализовать это, потому что без этого после пения у меня была ошибка, что запрос слишком длинный, и добавление, которое исправило это.
public class MemoryCacheTicketStore : ITicketStore
{
private const string KeyPrefix = "AuthSessionStore-";
private IMemoryCache _cache;
public MemoryCacheTicketStore()
{
_cache = new MemoryCache(new MemoryCacheOptions());
}
public async Task<string> StoreAsync(AuthenticationTicket ticket)
{
var guid = Guid.NewGuid();
var key = KeyPrefix + guid.ToString();
await RenewAsync(key, ticket);
return key;
}
public Task RenewAsync(string key, AuthenticationTicket ticket)
{
var options = new MemoryCacheEntryOptions();
var expiresUtc = ticket.Properties.ExpiresUtc;
if (expiresUtc.HasValue)
{
options.SetAbsoluteExpiration(expiresUtc.Value);
}
options.SetSlidingExpiration(TimeSpan.FromHours(1)); // TODO: configurable.
_cache.Set(key, ticket, options);
return Task.FromResult(0);
}
public Task<AuthenticationTicket> RetrieveAsync(string key)
{
AuthenticationTicket ticket;
_cache.TryGetValue(key, out ticket);
return Task.FromResult(ticket);
}
public Task RemoveAsync(string key)
{
_cache.Remove(key);
return Task.FromResult(0);
}
}