Entity framework Microsoft.AspNetCore.Identity.IdentityError:“;“无效用户名”;
我对用户模型进行了默认设置,只添加了两个自定义属性。EF创建了标准的表流 还有我的AspNetUsers表 如您所见,用户名可以为null 我的用户模型Entity framework Microsoft.AspNetCore.Identity.IdentityError:“;“无效用户名”;,entity-framework,asp.net-core,entity-framework-core,Entity Framework,Asp.net Core,Entity Framework Core,我对用户模型进行了默认设置,只添加了两个自定义属性。EF创建了标准的表流 还有我的AspNetUsers表 如您所见,用户名可以为null 我的用户模型 public class User : IdentityUser { public string FullName { get; set; } public string CreateAt { get; set; } public User() { this.CreateAt = Conver
public class User : IdentityUser
{
public string FullName { get; set; }
public string CreateAt { get; set; }
public User()
{
this.CreateAt = Convert.ToString(DateTime.Now);
}
}
当我创建user时,我有一个exeption
但我没有对用户名进行任何验证或制定任何规则。
ApplicationDBContext的我的启动配置
services.AddIdentityCore<User>(opts =>
{
opts.Password.RequiredLength = 5;
opts.Password.RequireNonAlphanumeric = false;
opts.Password.RequireLowercase = true;
opts.Password.RequireUppercase = true;
opts.Password.RequireDigit = true;
opts.User.AllowedUserNameCharacters = null;
}).AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDBContext>()
.AddDefaultTokenProviders();
services.AddIdentityCore(选项=>
{
opts.Password.RequiredLength=5;
opts.Password.RequireNonAlphanumeric=false;
opts.Password.RequireLowercase=true;
opts.Password.RequireUppercase=true;
opts.Password.RequireDigit=true;
opts.User.AllowedUserNameCharacters=null;
}).AddRoles()
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
opts.User.AllowedUserNameCharacters=null代码>没有帮助我。我做错了什么?您试图将用户名设置为空字符串。查看Microsoft.AspNetCore.Identity的GitHub存储库中的,您似乎无法允许null
或空字符串作为有效用户名。将AllowedUserNameCharacters
设置为null
仅意味着您没有检查白名单字符,这也是默认行为,但是IsNullOrWhiteSpace
的预验证保持不变
检查来自官方存储库的此代码快照中的注释:
private async Task ValidateUserName(UserManager<TUser> manager, TUser user, ICollection<IdentityError> errors)
{
var userName = await manager.GetUserNameAsync(user);
if (string.IsNullOrWhiteSpace(userName)) // <-- There is no way around this.
{
errors.Add(Describer.InvalidUserName(userName));
}
else if (!string.IsNullOrEmpty(manager.Options.User.AllowedUserNameCharacters) &&
userName.Any(c => !manager.Options.User.AllowedUserNameCharacters.Contains(c)))
{
errors.Add(Describer.InvalidUserName(userName));
}
else
{
var owner = await manager.FindByNameAsync(userName);
if (owner != null &&
!string.Equals(await manager.GetUserIdAsync(owner), await manager.GetUserIdAsync(user)))
{
errors.Add(Describer.DuplicateUserName(userName));
}
}
}
专用异步任务ValidateUserName(UserManager、TUser用户、ICollection错误)
{
var userName=await manager.GetUserNameAsync(用户);
if(string.IsNullOrWhiteSpace(userName))/!manager.Options.User.AllowedUserNameCharacters.Contains(c)))
{
添加(descripber.InvalidUserName(用户名));
}
其他的
{
var owner=await manager.FindByNameAsync(用户名);
如果(所有者)=null&&
!string.Equals(wait manager.GetUserIdAsync(所有者),wait manager.GetUserIdAsync(用户)))
{
添加(descripber.DuplicateUserName(用户名));
}
}
}