Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET核心MVC自定义标识属性_C#_Asp.net Core_Asp.net Core Mvc_Asp.net Core 1.1_Asp.net Core Identity - Fatal编程技术网

C# ASP.NET核心MVC自定义标识属性

C# ASP.NET核心MVC自定义标识属性,c#,asp.net-core,asp.net-core-mvc,asp.net-core-1.1,asp.net-core-identity,C#,Asp.net Core,Asp.net Core Mvc,Asp.net Core 1.1,Asp.net Core Identity,我正在尝试用ASP.NET核心MVC构建一个网站,并且正在使用Microsoft.Identity库。我在我的User(ApplicationUser)类中有一个名为Token的自定义属性。我想在登录时使用该令牌创建cookie。因此,我需要调用一些函数,允许我从登录的用户(通过UserManager或其他方式)获取令牌属性。它必须是登录的用户。) 我在互联网上搜索过,通过创建一个自定义工厂,然后将其添加到startup.cs,找到了几种解决方案。但我找不到或看不到访问该房产的方法User.Id

我正在尝试用ASP.NET核心MVC构建一个网站,并且正在使用Microsoft.Identity库。我在我的
User
(ApplicationUser)类中有一个名为
Token
的自定义属性。我想在登录时使用该令牌创建cookie。因此,我需要调用一些函数,允许我从登录的用户(通过UserManager或其他方式)获取
令牌
属性。它必须是登录的用户。)

我在互联网上搜索过,通过创建一个自定义工厂,然后将其添加到startup.cs,找到了几种解决方案。但我找不到或看不到访问该房产的方法
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;
        }
    }
因此,长话短说:我正在尝试访问自定义标识属性,并找到了将其添加到UserManager的方法,但找不到访问它的方法。

您的“CustomUserIdentityFactory”将声明添加到登录用户,以便将声明添加到cookie中,可以使用“user.claims”访问cookie通过指定索赔类型

假设您的索赔类型为“”

通过使用您自己的声明类型重写“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;
        }

希望这有帮助。

我找到了一个解决办法,在用户登录后通过使用
(wait\u userManager.GetUserAsync(HttpContext.user)).Token获取用户来设置cookie
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;
        }
var tokenClaimType = "http://www.example.com/ws/identity/claims/v1/token"
var token = User.Claims.Where(claim => claim.Type == tokenClaimType);