可以';无法获取当前用户的guid

本文关键字:用户 guid 获取 可以 | 更新日期: 2023-09-27 18:29:19

根据这个博客和这个答案,我正在获取用户名(似乎是正确的)。然而,当我按如下方式进行调用时,我会得到null

MembershipUser uno = Membership.GetUser(); //null
MembershipUser duo = Membership.GetUser(User.Identity.Name); // null
bool           tri = User.Identity.IsAuthenticated; // true
string         qua = User.Identity.AuthenticationType; // "ApplicationCookie"

用户肯定在DB中,我使用了MVC.NET模板中的标准注册模块。由于其他地方的要求,我需要生成实际的guid,并且不能使用用户名。

这是我的Web.config的一部分,我怀疑它可能有关联。我不擅长安全问题。

<system.web>
  <authentication mode="None" />
  <compilation debug="true" targetFramework="4.5.2" />
  <customErrors mode="Off"></customErrors>
  <httpRuntime targetFramework="4.5.2" />
</system.web>
<system.webServer>
  <modules>
    <remove name="FormsAuthentication" />
  </modules>
</system.webServer>

可以';无法获取当前用户的guid

首先,由于您使用的是模板中的安全性,因此不必使用Membership。您需要通过将其转换为ClaimsIdentity来获得正确类型的身份。然后,您可以访问该用户的所有声明。

有一种方法可以获取当前用户的名称和guid,您可以让intellisense来指导您。然而,安全问题还有很多需要考虑的,所以如果你很好奇,请继续阅读。


有角色、用户id、安全提供商等声明。由于所有这些都收集在一个列表中,因此您需要筛选出适合您情况的声明。作为帮助,您有字符串字段,例如RoleClaimTypeNameClaimType,用于常见请求的索赔。

var identity = User.Identity as ClaimsIdentity;
var roles = identity.Claims
  .Where(c => c.Type == identity.RoleClaimType)
  .Select(c => c.Value);

此外,请注意,在基本情况下(索赔只有一个身份),更建议应用ClaimsPrincipal(它也具有Claims属性)。