1

我想在ASP.NET Core MVC中構建一個網站,並使用Microsoft.Identity庫。我在我的User(ApplicationUser)類中有一個定製屬性,名爲Token。我想用該令牌在登錄時創建一個cookie。所以我需要調用一些函數來允許我從登錄用戶(通過UserManager或其他)獲取Token屬性,它必須是登錄的用戶。ASP.NET核心MVC自定義標識屬性

我已經在網上搜索並找到通過創建一個自定義工廠,然後將其添加到startup.cs Like this幾個解決方案。但我無法找到或看到訪問該屬性的方法。 User.Identity.GetToken()不起作用。

這裏是我的自定義工廠:

public class CustomUserIdentityFactory : UserClaimsPrincipalFactory<User, IdentityRole> 
    { 
     public CustomUserIdentityFactory(UserManager<User> userManager, RoleManager<IdentityRole> roleManager, IOptions<IdentityOptions> optionsAccessor) : base(userManager, roleManager, optionsAccessor) 
     {} 

     public override async Task<ClaimsPrincipal> CreateAsync(User user) { 
      var principal = await base.CreateAsync(user); 

      if(!string.IsNullOrWhiteSpace(user.Token)) { 
       ((ClaimsIdentity)principal.Identity).AddClaims(new[] { 
        new Claim(ClaimTypes.Hash, user.Token) 
       }); 
      } 

      return principal; 
     } 
    } 

這裏是在配置我Startup.cs

services.AddScoped<IUserClaimsPrincipalFactory<User>, CustomUserIdentityFactory>(); 

所以,長話短說:我試圖訪問一個自定義的身份屬性,並已找到了方法將其添加到UserManager,但無法找到訪問它的方法。

+0

我通過在用戶登錄後通過設置cookie來解決這個問題,方法是用'(await _userManager.GetUserAsync(HttpContext.User))提取用戶。「Token' –

回答

2

您的「CustomUserIdentityFactory」向登錄用戶添加聲明,以便將聲明添加到cookie中,可以通過指定聲明類型使用「User.Claims」來訪問聲明。

假設你的權利要求的類型是「http://www.example.com/ws/identity/claims/v1/token

更改代碼如下通過重寫使用自己的要求型「CreateAsync」的方法。

public override async Task<ClaimsPrincipal> CreateAsync(User user) { 
      var principal = await base.CreateAsync(user); 
      var tokenClaimType = "http://www.example.com/ws/identity/claims/v1/token" 

      if(!string.IsNullOrWhiteSpace(user.Token)) { 
       ((ClaimsIdentity)principal.Identity).AddClaims(new[] { 
        new Claim(tokenClaimType, user.Token) 
       }); 
      } 

      return principal; 
     } 

如何訪問令牌作爲"User.Claims"

var tokenClaimType = "http://www.example.com/ws/identity/claims/v1/token" 
var token = User.Claims.Where(claim => claim.Type == tokenClaimType); 

希望這有助於部分。

+0

它的確如此,謝謝! –