我使用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");