【问题标题】:How to logout of Blazor server from C# code如何从 C# 代码中注销 Blazor 服务器
【发布时间】:2021-08-23 18:23:17
【问题描述】:

我了解 Signal R 是直接注销的问题。 有没有人可以不按按钮退出 C# 代码?

任何方式都可以。

在我的例子中,用户按下了一个按钮。部分数据更改保存后,用户会自动退出。

谁能帮我解决这个问题?

【问题讨论】:

  • 你用什么认证?

标签: c# authentication blazor-server-side


【解决方案1】:

这取决于您的身份验证(基于 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 来完成。

【讨论】:

  • 谢谢尼古拉。你的 JS 计划是我问题的答案。在解决方案中,我对其进行了一些更改,但是在我第一次提出您的建议之后。非常好。
  • 这个答案似乎是this blog article 的一部分。 (以防万一有人想查看整个示例)。
【解决方案2】:

感谢@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>

当你按下按钮时,它会像你期望的那样让你退出。

【讨论】:

    猜你喜欢
    • 2020-12-29
    • 1970-01-01
    • 2015-07-09
    • 2013-08-28
    • 2020-12-26
    • 2021-08-16
    • 1970-01-01
    • 2020-05-23
    • 2015-08-18
    相关资源
    最近更新 更多