ASP.NET Core Razor Pages布局页Cookie登录判断写法
Razor Pages 布局页登录状态判断方案
if 条件的问号位置直接填写如下判断代码即可:
User.Identity?.IsAuthenticated == true
实现说明
- 基于Cookie认证的场景下,ASP.NET Core 内置认证中间件会在请求管道中自动完成Cookie解析、身份校验工作,不需要手动读取请求Cookie做自定义判断。
- Razor 布局/视图内置的
User对象是ClaimsPrincipal类型,承载了当前请求的用户身份信息,其下Identity.IsAuthenticated属性在用户持有有效登录凭证时返回true,未登录、Cookie过期/无效时返回false。 - 写法中加入
?.空条件运算符是为了兼容Identity为null的边缘场景,避免抛出空引用异常,是生产环境推荐的稳妥写法。
登录逻辑优化提示
你当前的登录代码存在两个容易引发状态异常的问题,建议同步调整:
SignInAsync是异步方法,必须添加await关键字等待执行完成,否则可能出现重定向跳转时Cookie还未写入响应,导致登录状态丢失。- 调用
SignInAsync时显式指定和创建身份时一致的Cookie认证方案,避免后续配置多认证方案时出现匹配错误。
修正后的登录核心代码:
List<Claim> claims = new List<Claim>() { new Claim("Test","Test"), new Claim(ClaimTypes.NameIdentifier,user.UserID.ToString()), new Claim(ClaimTypes.Name,user.UserName), new Claim(ClaimTypes.Role,user.UserRole.ToString()) }; var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); var claimPrincipal = new ClaimsPrincipal(identity); // 修正SignInAsync调用 await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, claimPrincipal); return RedirectToPage("../Index");
内容的提问来源于stack exchange,提问作者Jesica
相关产品推荐
相关产品推荐

