gpt4 book ai didi

c# - 外部注销后如何重定向到设置注销页面(openid Connect)Asp net core 3.1

转载 作者:行者123 更新时间:2023-12-03 17:10:14 26 4
gpt4 key购买 nike

我正在尝试使用 OpenId Connect (oidc) 作为登录提供者为网页(asp net core 3.1)实现外部登录/注销。登录工作正常,但注销重定向未按预期工作。我确信有一个简单的修复方法,但我对 .NET 开发还很陌生。这是我迄今为止尝试过但没有成功的方法:
注销的 HTML 如下所示:

<form class="form-inline" asp-area="Identity" asp-page="/Account/Logout">
<button type="submit" class="nav-link btn btn-link text-light">Logg ut</button>
</form>
Logout.cshtml.cs:
        //public async Task<IActionResult> OnPost(string returnUrl = null)
//{
// await _signInManager.SignOutAsync();
// await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
// await HttpContext.SignOutAsync(OpenIdConnectDefaults.AuthenticationScheme);
// _logger.LogInformation("User logged out.");
// if (returnUrl != null)
// {
// return LocalRedirect(returnUrl);
// }
// else
// {
// return RedirectToPage();
// }

//}

public async Task<IActionResult> OnPost()
{
var user = HttpContext.User;
if (user?.Identity.IsAuthenticated == true)
{
await _signInManager.SignOutAsync();
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
}
//await HttpContext.SignOutAsync(OpenIdConnectDefaults.AuthenticationScheme);
var callbackUrl = Url.Page("/Account/Logout", pageHandler: null, values: null, protocol: Request.Scheme);
return SignOut(new AuthenticationProperties { RedirectUri = callbackUrl }, CookieAuthenticationDefaults.AuthenticationScheme, OpenIdConnectDefaults.AuthenticationScheme);


}
在启动.cs
                //options.SignedOutCallbackPath = "/Identity/Account/Logout";
options.SignedOutRedirectUri = "/Identity/Account/Logout";
//options.RemoteSignOutPath = "/Identity/Account/Logout";
options.Events = new OpenIdConnectEvents
{
//OnSignedOutCallbackRedirect = (c) =>
//{
// c.Response.Redirect("/Identity/Account/Logout)");
// c.HandleResponse();
// return Task.CompletedTask;
//},
在 loginprovider 中设置的重定向 uri:
Redirect URI set at loginprovider
我最接近重定向(根本没有调用 OnPost 函数)是使用 RemoteSignOutPath,但这只是在/Identity/Account/Logout 处返回一个空白页面。
编辑:澄清一下,现在我可以注销并调用 OnPost 函数,但是在注销时,用户被重定向到 loginproviders 自己的/loggedout 页面,其中包含有关用户从应用程序注销的信息。

最佳答案

请使用这个简单的示例:

  • 像这样更新您的 Controller 中的注销操作:
  • [HttpGet]
    public async Task<IActionResult> Logout()
    {
    var user = HttpContext.User;
    if (user?.Identity.IsAuthenticated == true)
    {
    await _signInManager.SignOutAsync();
    }

    return View("Home");
    }
  • 像这样更新 html View :
  • <a class="dropdown-item" asp-action="Logout" asp-controller="Account">Logout</a>

    关于c# - 外部注销后如何重定向到设置注销页面(openid Connect)Asp net core 3.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64901614/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com