Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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
Mongodb 重写UserClaimsPrincipalFactory generateclaimsasync方法不会';不要让主张坚持下去_Mongodb_Asp.net Core Identity - Fatal编程技术网

Mongodb 重写UserClaimsPrincipalFactory generateclaimsasync方法不会';不要让主张坚持下去

Mongodb 重写UserClaimsPrincipalFactory generateclaimsasync方法不会';不要让主张坚持下去,mongodb,asp.net-core-identity,Mongodb,Asp.net Core Identity,我已覆盖userclaimsprincipalfactory,如下所示: public class CustomClaimsPrincipalFactory : UserClaimsPrincipalFactory<User, Role> { public CustomClaimsPrincipalFactory(UserManager<User> userManager, RoleManager<Role> roleManager,

我已覆盖userclaimsprincipalfactory,如下所示:

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

    protected override async Task<ClaimsIdentity> GenerateClaimsAsync(User user)
    {
        var id = await base.GenerateClaimsAsync(user);
        id.AddClaim(new Claim(ClaimTypes.Email, user.Email));

        return id;
    }
}
 services.AddIdentityMongoDbProvider<User, Role>(identityOptions =>
        {
            identityOptions.Password.RequiredLength = 6;
            identityOptions.Password.RequireLowercase = false;
            identityOptions.Password.RequireUppercase = false;
            identityOptions.Password.RequireNonAlphanumeric = false;
            identityOptions.Password.RequireDigit = false;
        }, mongoIdentityOptions => {
            mongoIdentityOptions.ConnectionString = configuration["Data:DefaultConnection:ConnectionString"];
        }).AddClaimsPrincipalFactory<CustomClaimsPrincipalFactory>();
这里的用户是ClaimsPrincipal类型,对象看起来像我添加声明的对象,但该对象中的任何位置都没有声明

这是我用来签名的代码:

 public async Task<UserDto> Login(LoginDataContract dataContract)
    {
        var appUser = userManager.Users.SingleOrDefault(s => s.Email == dataContract.Email);

        var result = await signInManager.PasswordSignInAsync(dataContract.Email, dataContract.Password, false, false);
        if (result.Succeeded)
        {
            var jwtObject = AuthenticationHelper.GenerateJwtToken(dataContract.Email, appUser, appSettings);

            var userDto = mapper.Map<User, UserDto>(appUser);

            userDto.Token = jwtObject.token;
            userDto.TokenExpiresIn = jwtObject.expiresIn;
            return userDto;
        }

        throw new Exception("Failed to login!");
    }
公共异步任务登录(LoginDataContract)
{
var appUser=userManager.Users.SingleOrDefault(s=>s.Email==dataContract.Email);
var result=await-signInManager.PasswordSignInAsync(dataContract.Email,dataContract.Password,false,false);
if(result.successed)
{
var jwtObject=AuthenticationHelper.GenerateJwtToken(dataContract.Email、appUser、appSettings);
var userDto=mapper.Map(appUser);
userDto.Token=jwtObject.Token;
userDto.TokenExpiresIn=jwtObject.expiresIn;
返回userDto;
}
抛出新异常(“登录失败!”);
}

为什么索赔不能保留?

是的,很抱歉这是另一次尝试使用自定义索赔。我把它从问题中删除了
 public async Task<UserDto> Login(LoginDataContract dataContract)
    {
        var appUser = userManager.Users.SingleOrDefault(s => s.Email == dataContract.Email);

        var result = await signInManager.PasswordSignInAsync(dataContract.Email, dataContract.Password, false, false);
        if (result.Succeeded)
        {
            var jwtObject = AuthenticationHelper.GenerateJwtToken(dataContract.Email, appUser, appSettings);

            var userDto = mapper.Map<User, UserDto>(appUser);

            userDto.Token = jwtObject.token;
            userDto.TokenExpiresIn = jwtObject.expiresIn;
            return userDto;
        }

        throw new Exception("Failed to login!");
    }