ASP.NET标识属性扩展



我使用Asp.Net Identity进行身份验证,我的要求是登录后当前只能访问User.Identity.Name,这只是用户名。

有什么方法可以像一样在登录后添加更多属性吗

User.Identity.UserType
User.Identity.DepartmentId

为什么我想使用这个来避免会话来识别视图上的用户。

首先,您需要向用户添加自定义声明。对于创建用户后的exmaple:

await _userManager.Value.AddClaimAsync(user, new Claim("UserType", "SomeType"));

然后创建一个扩展方法来读取索赔值:

public static string GetUserType(this IIdentity identity)
{
if (identity == null)
throw new ArgumentNullException(nameof(identity));
var claim = ((ClaimsIdentity)identity).FindFirst("UserType")?.Value;
return claim ?? string.Empty;
}

登录后,您可以访问用户类型:

var userType = User.Identity.GetUserType();

这里有一个通用的扩展来获得自定义声明:

public static T Get<T>(this IIdentity identity, string propertyName)
{
if (identity == null)
throw new ArgumentNullException(nameof(identity));
var value = ((ClaimsIdentity)identity).FindFirst(propertyName)?.Value;
if (value == null)
return default(T);
var type = typeof(T);
if (type.IsEnum)
return (T)Enum.Parse(typeof(T), value);
return (T)Convert.ChangeType(value, typeof(T));
}

例如,您有一个UserType:的枚举

public enum UserType 
{
Admin,
Editor,
User,
}
var userType = User.Identity.Get<UserType>("UserType");
var representativeId = User.Identity.Get<int>("DepartmentId");

相关内容

  • 没有找到相关文章

最新更新