在我的代码中,我处理 DbUpdateConcurrencyException ,对于更新用户帐户的情况,并且用户不再存在,我想将他们注销 - 因为他们不再是有效用户。
当然,这不是什么大问题,因为这种情况应该很少见,他们尝试访问的任何页面都不会接受他们,因为他们不再有声明。但将它们注销更干净。
我无法在 Blazor 中使用 SignInManager。
要使用身份库 LogOut.cshtml,需要对页面进行 POST 才能注销,因为这个安全问题 https://stackoverflow.com/questions/25710805/why-does-logout-in-asp-net-identity-use-post-instead-of-get.
那么,如何强制从代码中注销呢?有很多文章介绍为什么它必须是 POST 以及如何创建页面来执行此操作。但没有(我能找到的)强制注销的方法,而不是要求用户单击提交。
在 Logout.cshtml 页面中,当通过 GET 检索页面时,您可以使用 javascript 立即执行自动 POST。
注销.cshtml:
@page
@model MyApp.Pages.LogoutModel
<form method="post"></form>
@section Scripts {
<script>
window.onload = function () {
document.forms[0].submit();
};
</script>
}
注销.cshtml.cs:
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace MyApp.Pages
{
[IgnoreAntiforgeryToken]
public class LogoutModel : PageModel
{
public async Task<IActionResult> OnPostAsync()
{
await HttpContext.SignOutAsync();
return Redirect("/");
}
}
}
然后,在您要执行注销的 Blazor 组件中:
@inject NavigationManager nav
...
nav.NavigateTo("/Logout", true);
(基于所描述的方法here https://stackoverflow.com/a/74080228/1531760)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)