在 _Layout ASP.NET 3.0 Razor Pages 项目中包含注销功能
Including Logout functionality in _Layout ASP.NET 3.0 Razor Pages project
我构建了一个简单的剃刀页面应用程序,其中登录使用 AddAuthentication() 并检查以确保用户名和密码与数据库中的值匹配。然后基于此授权每个页面,因此只有登录用户才能转到其他页面。我的登录视图模型包括以下类型的身份验证:
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, UserName)
};
var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
if (RememberMe)
{
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(claimsIdentity),
new AuthenticationProperties
{
IsPersistent = RememberMe,
ExpiresUtc = DateTimeOffset.UtcNow.AddHours(2)
});
}
else
{
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(claimsIdentity));
}
return RedirectToPage("/index");
现在我需要创建注销功能。我觉得在导航栏中注销似乎很常见。我的导航栏是使用共享 _layout 构建的。因此,首先我需要将某种模型传递给此 _layout class 以便我可以捕获 onpost 事件以删除会话 cookie 或持久性 cookie(如果存在)并将用户重定向到登录页面。
如果没有控制器来维护 MVVM 方法,如何做到这一点?
其次,关于登出。我想用
public async Task<IActionResult> Logout()
{
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
return RedirectToPage("/index");
}
在我传递给 _layout 的模型中。但是,使用 HttpContext 仅适用于 PageModel,因此仅创建模型 class 似乎不起作用,而是我需要创建一个部分 PageModel class 以传递给 _layout。想法?
谢谢
我通常使用带有代码隐藏的单独 Razor 页面来执行注销。您应该在注销后向用户提供一些反馈,而不是仅仅将用户重定向到索引页面。因此,由于注销可以在 GET 上完成,因此您可以从您的布局到您的注销页面 link。
我构建了一个简单的剃刀页面应用程序,其中登录使用 AddAuthentication() 并检查以确保用户名和密码与数据库中的值匹配。然后基于此授权每个页面,因此只有登录用户才能转到其他页面。我的登录视图模型包括以下类型的身份验证:
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, UserName)
};
var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
if (RememberMe)
{
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(claimsIdentity),
new AuthenticationProperties
{
IsPersistent = RememberMe,
ExpiresUtc = DateTimeOffset.UtcNow.AddHours(2)
});
}
else
{
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(claimsIdentity));
}
return RedirectToPage("/index");
现在我需要创建注销功能。我觉得在导航栏中注销似乎很常见。我的导航栏是使用共享 _layout 构建的。因此,首先我需要将某种模型传递给此 _layout class 以便我可以捕获 onpost 事件以删除会话 cookie 或持久性 cookie(如果存在)并将用户重定向到登录页面。
如果没有控制器来维护 MVVM 方法,如何做到这一点?
其次,关于登出。我想用
public async Task<IActionResult> Logout()
{
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
return RedirectToPage("/index");
}
在我传递给 _layout 的模型中。但是,使用 HttpContext 仅适用于 PageModel,因此仅创建模型 class 似乎不起作用,而是我需要创建一个部分 PageModel class 以传递给 _layout。想法?
谢谢
我通常使用带有代码隐藏的单独 Razor 页面来执行注销。您应该在注销后向用户提供一些反馈,而不是仅仅将用户重定向到索引页面。因此,由于注销可以在 GET 上完成,因此您可以从您的布局到您的注销页面 link。