ASP.NET Identity创建用户时LockoutEnabled始终被设为true如何处理
问题原因
这是ASP.NET Core Identity的默认行为,和Identity的全局配置规则有关:
默认情况下,Identity配置项Lockout.AllowedForNewUsers的默认值为true,表示允许对新创建的用户启用锁定功能。UserManager.CreateAsync方法执行时会自动用这个配置值覆盖你提前给用户实体设置的LockoutEnabled属性,所以哪怕你创建前手动设为false,执行创建后也会被重置为true。
解决方案
根据业务需求可以二选一:
方案1:全局修改默认配置(适合所有新用户都不需要启用锁定的场景)
在服务注册Identity的代码中修改配置,以.NET 6+的顶级语句写法为例:
builder.Services.AddDefaultIdentity<SiteUser>(options => { // 关闭新用户默认启用锁定的规则 options.Lockout.AllowedForNewUsers = false; }) .AddEntityFrameworkStores<你的DbContext类名>();
修改后所有新创建的用户LockoutEnabled都会默认设为false,不需要再单独给实体赋值。
方案2:创建成功后手动修改(适合仅部分用户不需要启用锁定的场景)
如果只有当前业务场景下的新用户需要关闭锁定,其他场景仍保留默认规则,可以在用户创建成功后手动调用UserManager的方法修改属性:
if (result.Succeeded) { // 手动设置当前用户的锁定状态为false await _userManager.SetLockoutEnabledAsync(user, false); return new StatusCodeResult(StatusCodes.Status201Created); }
这种方式不会影响全局的Identity默认规则,灵活性更高。
内容的提问来源于stack exchange,提问作者Abol_Fa
相关产品推荐
相关产品推荐

