ASP.NET Core 2.1中的CookieAuthenticationOptions.LogoutPath属性做什么?

Wel*_*ing 2 c# asp.net-core asp.net-core-2.1

在ASP.NET Core 2.1中,任何人都可以解释其CookieAuthenticationOptions.LogoutPath作用吗?根据说明文件

如果提供了LogoutPath处理程序,则将根据ReturnUrlParameter重定向到该路径的请求。

但我什至不认为该句子具有适当的语法,因此我对含义感到困惑。

在中Startup.cs,我将其设置为:

// Added after AddMvc()
services.ConfigureApplicationCookie(options =>
{
    options.LogoutPath = $"/account/logout";
});
Run Code Online (Sandbox Code Playgroud)
  1. 什么时候叫这个?

  2. 我是否需要为此GETAccountControllerView中创建相应的动作?还是POST采取行动?例如:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Logout()
    {
        await _signInManager.SignOutAsync();
        return RedirectToAction("Index", "Home");
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我的注销操作是否需要注销用户,或者届时他们是否已经注销?

pok*_*oke 5

LogoutPath那你可以用cookie认证方案配置是一个奇怪的一个。尽管LoginPath具有直接影响,并且基本上是在挑战cookie身份验证时将最终用户重定向到的URL,但LogoutPath不能直接使用。

取而代之的LogoutPath是,当Cookie身份验证方案注销时,所配置的仅用于验证当前URL。的检查是这样的

// Only redirect on the logout path
var shouldRedirect = Options.LogoutPath.HasValue && OriginalPath == Options.LogoutPath;
await ApplyHeaders(shouldRedirect, context.Properties);
Run Code Online (Sandbox Code Playgroud)

因此,这基本上检查了 OriginalPath了当前请求的路径是否等于配置的注销路径。如果是这种情况,则该ApplyHeaders调用将重定向到RedirectUri身份验证属性。

这样做的目的是确保仅在访问实际注销URL时才发生重定向回路径的重定向。因此,例如,如果用户单击注销按钮,则他们可能会注销,然后重定向回到其来源。但是,如果他们在其他地方注销,则它们不会自动重定向回,因为只有注销URL被认为是将用户重定向回的安全位置。

同样的逻辑也存在LoginPath。但是存在其他逻辑,即当该方案受到挑战时(例如,当需要通过授权过滤器进行认证时),cookie身份验证方案也将重定向该URL。

我是否需要在我的帐户中创建相应的GET操作 AccountController View中?还是可以采取POST行动?

这取决于您以及您要如何处理注销。为了使上述逻辑运行,您只需要任何对该路由执行操作,因此您还可以执行POST以要求用户执行表单提交以将其注销(以防止通过GET请求意外注销)。

我的注销操作是否需要注销用户,或者届时他们是否已经注销?

SignOutAsync由于这些路由没有隐式处理,因此您将必须自称。就像您还需要在LoginPath,您也需要实现注销逻辑。

配置的路径实际上只是让cookie方案知道那些路由在哪里,但是它们对其行为没有任何影响。