Distinguish between SignOutAsync and SlidingExpiration



我需要区分从按钮注销,该按钮具有SignOutAsync方法调用和实际会话过期。我们有办法做到这一点吗?

这就是我现在拥有的:

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"));
}

除其他外,这就是我目前要尝试和区分的:

if (_httpContext.User.Identity.IsAuthenticated)
await this.UserIdentitySignOutAsync(_httpContext, _context);
else if(_httpContext.Request.Path.Value.ToLower().Contains("/signin"))
Feedback = new Feedback() { Message = "Your session has expired.", IsValid = false };

当然,这是行不通的,因为有多种来源,我想根据签约结果显示不同的信息。但我需要知道的重要一点是,是否有任何方法可以区分两者。

我的意思是。。。因为在这一点上,cookie已经被清除,我们没有任何关于它发生了什么的信息。

如果这是一种弥补差异的方法,请告诉我。我会很高兴收到的。

谢谢你的帮助。

我找到了答案。我不得不添加一个事件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());
}
}

就这样…:(

相关内容

  • 没有找到相关文章

最新更新