asp.net-core - 在 _Layout ASP.NET 3.0 Razor Pages 项目中包括注销功能
问题描述
我已经构建了一个简单的剃须刀页面应用程序,其中登录使用 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 类,这样我就可以捕获一个 onpost 事件,以删除会话 cookie 或持久性 cookie(如果存在)并将用户重定向到登录页面。
如果没有控制器来维护 MVVM 方法,如何做到这一点?
第二,关于退出。我想用
public async Task<IActionResult> Logout()
{
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
return RedirectToPage("/index");
}
在模型中我传递给_layout。但是,使用 HttpContext 仅适用于 PageModel,因此仅创建模型类似乎不起作用,但我需要创建一个部分 PageModel 类以传递给 _layout。想法?
谢谢
解决方案
我通常使用带有执行注销的代码隐藏的单独 Razor 页面。您应该在注销后向用户提供一些反馈,而不是仅仅将用户重定向到索引页面。因此,您可以从布局中获得指向注销页面的链接,因为注销可以在 GET 上完成。
推荐阅读
- android - 用户离开应用程序时设置通知如何工作?
- python - 如何检测 pygame 碰撞?
- node.js - 如何处理从 Node.js 服务器应用程序提供的客户端下载 gzip?
- sql-server - 如何使用 SQL Server 计算 LCM 值?
- html - 自定义 div 滚动
- node.js - 如何使用 Nuxt 配置 Prism
- android - 分页库使用示例的 Proguard 问题(在 Google Codelabs 中)
- python - 使用 Python 和 Bash 从 grep 获得的字符串中删除非整数
- python - 根据元组中的两个项目对列表进行排序 - Python
- python - 如何在不删除 Python 中的分隔符的情况下拆分具有多个分隔符的字符串?