我得到了这个需要对用户进行身份验证的操作。
[HttpGet]
[Authorize]
public async Task<IActionResult> Index(string returnUrl)
{
var vm = await CreateViewModel(returnUrl);
return View(vm);
}
现在,我已经为登录会话的用户设置了超时,但从上面的操作视图中。它会将用户重定向到我的应用程序上不存在的页面。 所以我找到了事件:OnRedirectToLogin
但我无法从context
操作中找到任何相关内容Index
用户来自哪里,以便我可以决定将用户重定向到哪里。
services.AddAuthentication("Cookies")
.AddCookie(options =>
{
options.Cookie.Name = "Cookies";
options.ExpireTimeSpan = TimeSpan.FromMinutes(1);
options.Events = new CookieAuthenticationEvents
{
OnRedirectToLogin = (context) =>
{
return Task.CompletedTask;
}
};
})
是否可以存储/发送操作returnUrl
Index
登录到期时OnRedirectToLogin
?
更新视图:
<form asp-action="">
@Html.HiddenFor(c => c.ReturnUrl)
....
<div class="button-section">
<button name="button" value="no" type="submit">Cancel</button>
<button name="button" value="yes" type="submit">Ok</button>
</div>
</form>
您可以在 RedirectContext 中访问请求和查询参数。在那里,您可以读取 returnUrl 参数并执行重定向。
options.Events = new CookieAuthenticationEvents
{
OnRedirectToLogin = context =>
{
var returnUrl = context.Request.Query["returnUrl"];
context.Response.Redirect(returnUrl);
return Task.CompletedTask;
}
}