Mongodb 重写UserClaimsPrincipalFactory generateclaimsasync方法不会';不要让主张坚持下去
我已覆盖userclaimsprincipalfactory,如下所示: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,
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!");
}