在ASP.NET Core 2.1中,谁能解释CookieAuthenticationOptions.LogoutPath
的作用?每the documentation说:
如果为处理程序提供了LogoutPath,则对该路径的请求将基于ReturnUrlParameter重定向。
但是我什至不认为句子具有适当的语法,所以我对意义感到困惑。
在Startup.cs
中,我将其设置如下:
// Added after AddMvc()
services.ConfigureApplicationCookie(options =>
{
options.LogoutPath = $"/account/logout";
});
何时称呼它?
我是否需要在GET
中创建相应的AccountController
动作并为此查看?还是POST
动作有效?例如:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Logout()
{
await _signInManager.SignOutAsync();
return RedirectToAction("Index", "Home");
}
我的注销操作是否需要注销用户,或者届时他们是否已经注销?
答案 0 :(得分:4)
您可以使用cookie身份验证方案配置的LogoutPath
很奇怪。尽管LoginPath
具有直接作用,并且基本上是在挑战cookie身份验证时最终用户将重定向到的URL,但是LogoutPath
不能直接使用。
相反,当cookie身份验证方案注销时,仅使用配置的LogoutPath
来验证当前URL。 check looks like this:
// Only redirect on the logout path
var shouldRedirect = Options.LogoutPath.HasValue && OriginalPath == Options.LogoutPath;
await ApplyHeaders(shouldRedirect, context.Properties);
因此,这基本上检查了当前请求路径OriginalPath
是否等于配置的注销路径。如果是这种情况,则ApplyHeaders
调用将重定向到身份验证属性的RedirectUri
。
这样做的目的是确保仅在访问实际注销URL时才发生重定向回路径的重定向。因此,例如,如果用户单击注销按钮,则他们可能会注销,然后重定向回到其来源。但是,如果将它们注销到其他位置,则不会自动将它们重定向回,因为只有注销URL被认为是将用户重定向回的安全位置。
LoginPath
也存在相同的逻辑。但是还有其他逻辑,即Cookie身份验证方案在受到质疑时(例如,通过授权过滤器要求进行身份验证时)也会将重定向至该URL。
我是否需要在
AccountController
中创建相应的GET操作并为此进行查看?还是可以执行POST操作?
这取决于您以及您要如何处理注销。为了使上述逻辑运行,您只需要在该路由上执行 any 操作即可,因此您还可以执行POST,要求用户执行表单提交以将其注销(以防止意外注销)。通过GET请求)。
我的注销操作是否需要注销用户,或者届时他们是否已经注销?
由于这些路由没有隐式处理,因此您必须自己致电SignOutAsync
。就像您还需要在LoginPath
上实现自己的登录逻辑一样,您也需要实现注销逻辑。
配置的路径实际上只是让cookie方案知道这些路由在哪里,但对它们的行为没有任何影响。