.NET Core 2.2 Cookie-аутентификация не запоминает пользователя - PullRequest
0 голосов
/ 08 апреля 2019

Привет, ребята, у меня проблема с Аутентификацией 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...