Umbraco 7.8.1视图中如何判断用户登录及角色?User.Identity.IsAuthenticated始终返回false
Umbraco 7.8.1:视图中判断用户登录与角色检查方案
嘿,我来帮你解决这个问题——你遇到的User.Identity.IsAuthenticated始终返回false,核心原因是Umbraco的用户体系分为前端会员和后台管理员两种,ASP.NET原生的User.Identity并不适配它的专属认证逻辑,咱们分场景来处理:
一、前端会员(网站注册用户)的判断与角色检查
如果你的需求是判断网站的注册会员是否登录,直接用Umbraco封装的MembershipHelper才是正确姿势:
1. 判断是否登录
在.cshtml视图中,通过MembershipHelper的IsLoggedIn()方法直接判断,比原生方法靠谱得多:
@using Umbraco.Web @{ var membershipHelper = Umbraco.MembershipHelper; } @if (membershipHelper.IsLoggedIn()) { <p>会员已登录,欢迎@membershipHelper.GetCurrentMember().Name!</p> } else { <p>请登录会员账号</p> }
2. 检查会员角色
获取当前会员对象后,用IsInRole()方法判断是否属于指定角色,或者直接获取所有角色:
@{ var currentMember = membershipHelper.GetCurrentMember(); } // 检查是否属于"VIP"角色 @if (currentMember.IsInRole("VIP")) { <p>您是VIP会员,可享受专属权益</p> } // 列出所有所属角色 <p>您的会员角色:@string.Join(", ", currentMember.Roles)</p>
二、后台管理员/编辑者的判断与角色检查
如果是要判断用户是否登录到Umbraco后台,得用UmbracoContext的安全服务来获取后台用户:
1. 判断后台用户是否登录
通过UmbracoContext.Security.CurrentUser是否为null来判断:
@using Umbraco.Web @{ var umbracoContext = UmbracoContext.Current; var currentBackOfficeUser = umbracoContext?.Security?.CurrentUser; } @if (currentBackOfficeUser != null) { <p>后台用户已登录:@currentBackOfficeUser.Name</p> } else { <p>未登录到Umbraco后台</p> }
2. 检查后台用户组(角色)
后台用户的角色是通过用户组管理的,你可以通过组的Alias来判断权限:
// 检查是否是管理员组(默认Alias为"admin") @if (currentBackOfficeUser.Groups.Any(g => g.Alias.Equals("admin", StringComparison.OrdinalIgnoreCase))) { <p>您是管理员,拥有最高操作权限</p> } // 列出所有所属后台组 <p>您的后台组:@string.Join(", ", currentBackOfficeUser.Groups.Select(g => g.Name))</p>
为什么User.Identity.IsAuthenticated一直返回false?
- 对于前端会员:Umbraco的会员系统基于ASP.NET Membership但有自己的封装,原生
User.Identity不一定能正确识别Umbraco的会员认证状态,用MembershipHelper是官方推荐的方式。 - 对于后台用户:后台用户的认证Cookie是Umbraco专属的,ASP.NET原生身份系统不会自动关联,所以必须用
UmbracoContext的安全服务来判断。
内容的提问来源于stack exchange,提问作者Aleksander Grading
相关产品推荐
相关产品推荐

