Distin guish между SignOutAsyn c и SlidingExpiration - PullRequest
0 голосов
/ 25 февраля 2020

Мне нужно различить guish между выходом из кнопки, которая имеет вызов метода SignOutAsyn c и фактический сеанс истекает. Есть ли способ, которым мы можем сделать это?

Это то, что у меня есть в данный момент:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
                // Adds a cookie for the browser to remember
                .AddCookie(options =>
                {
                    options.LoginPath = "/signin";
                    options.LogoutPath = "/signout";
                    options.AccessDeniedPath = "/forbidden";
                    options.SlidingExpiration = true;
                });

Метод выхода

[HttpGet]
        public async Task<IActionResult> SignOut()
    {
        // Other code
        await httpContext.SignOutAsync();

        // Redirects him/her to the home route
        return Redirect((HttpContext.Request.Scheme +
                                            "://" +
                                            HttpContext.Request.Host +
                                            HttpContext.Request.Path.ToString() +
                                            HttpContext.Request.QueryString).Replace(HttpContext.Request.Path.ToString(), "/" + global.Portal.Name + "?so=1"));
    }

И среди прочего, это то, что я сейчас пытаюсь отличить на исходе входа. Но здесь важно знать, есть ли способ различить guish между двумя.

Я имею в виду ... Потому что на данный момент повар ie уже очищено, и у нас нет никакой информации о том, что с ним произошло.

Если есть способ разобраться в этом, пожалуйста, сообщите мне. Я с радостью приму его.

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 25 февраля 2020

Я нашел ответ. Мне пришлось добавить событие OnRedirectLogin и мне удалось найти обходной путь, установив для строки сеанса получение / настройку ее значения.

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
                // Adds a cookie for the browser to remember
                .AddCookie(options =>
                {
                    options.LoginPath = "/signin";
                    options.LogoutPath = "/signout";
                    options.AccessDeniedPath = "/forbidden";
                    options.SlidingExpiration = true;
                    options.Events = new CookieAuthenticationEvents()
                    {
                        OnRedirectToLogin = op =>
                        {
                            if (op.Request.Query["so"].Count == 0)
                                op.HttpContext.Session.SetString("RedirectToLogin", true.ToString());
                        op.Response.Redirect(op.RedirectUri);

                        return Task.FromResult(0);
                    }
                };
            });

А потом ...

if (_httpContext.User.Identity.IsAuthenticated)
                await this.UserIdentitySignOutAsync(_httpContext, _context);
            else
            {
                var value = _httpContext.Session.GetString("RedirectToLogin");
                bool.TryParse(value, out bool redirectToLogin);

                if (redirectToLogin)
                {
                    Feedback = new Feedback() { Message = "Your session has expired.", IsValid = false };
                    _httpContext.Session.SetString("RedirectToLogin", false.ToString());
                }
            }

И это сделал это ...:)

...