【发布时间】:2021-08-23 18:23:17
【问题描述】:
我了解 Signal R 是直接注销的问题。 有没有人可以不按按钮退出 C# 代码?
任何方式都可以。
在我的例子中,用户按下了一个按钮。部分数据更改保存后,用户会自动退出。
谁能帮我解决这个问题?
【问题讨论】:
-
你用什么认证?
标签: c# authentication blazor-server-side
我了解 Signal R 是直接注销的问题。 有没有人可以不按按钮退出 C# 代码?
任何方式都可以。
在我的例子中,用户按下了一个按钮。部分数据更改保存后,用户会自动退出。
谁能帮我解决这个问题?
【问题讨论】:
标签: c# authentication blazor-server-side
这取决于您的身份验证(基于 cookie、JWT、Azure AD 等)。
例如,如果您使用标准模板中集成的 Identity Server,您可以通过 POST 调用 /Identity/Account/Logout 端点。
在这种情况下,将执行以下代码(您的代码会有所不同):
public async Task<IActionResult> OnPost(string returnUrl = null)
{
var user = await _signInManager.UserManager.GetUserAsync(HttpContext.User);
if (user != null)
{
await _signInManager.SignOutAsync();
_logger.LogInformation("User {Username} logged out.", user.UserName);
}
if (returnUrl != null)
{
return LocalRedirect(returnUrl);
}
else
{
return RedirectToPage();
}
}
这个 POST 调用可以通过 JS 使用 JSInterop 来完成。
【讨论】:
感谢@Nicola 他的回答,我用 Javascript 创建了一个简单的解决方案。
我在示例中使用了一个按钮,但您可以在 C# 代码中调用函数 getMeOutOfHere()。
在剃须刀页面上
@inject IJSRuntime JsRuntime
<button @onclick="getMeOutOfHere">log me out</button>
在
@code{...
public async Task getMeOutOfHere()
{
await JsRuntime.InvokeVoidAsync("IamOut");
}
}
在 LoginDisplay.Razor 中添加注销按钮
id="logoutButton"
在_Host.cshtml中
<script>
window.IamOut = () => {
document.getElementById("logoutButton").click();
};
</script>
当你按下按钮时,它会像你期望的那样让你退出。
【讨论】: