我正在寻找一种方法来禁用用户,而不是删除他们从系统,这是保持数据完整性的相关数据。但似乎ASPNET的身份只提供删除的记账。
有一个新的锁定功能,但它似乎可以控制锁定,以禁用用户,但只有在一定数量的不正确的密码尝试锁定用户。
还有其他选择吗?
发布于 2016-02-10 09:01:22
当您创建一个安装了标识位的站点时,您的站点将有一个名为"IdentityModels.cs“的文件。该文件中有一个名为ApplicationUser的类,它继承自IdentityUser。
// You can add profile data for the user by adding more properties to your ApplicationUser class, please visit https://devblogs.microsoft.com/aspnet/customizing-profile-information-in-asp-net-identity-in-vs-2013-templates/ to learn more.
public class ApplicationUser : IdentityUser在注释中有一个很好的链接,为了方便地单击这里
本教程将向您详细介绍为用户添加自定义属性所需做的工作。
实际上,甚至不用看教程。
现在,在您的AccountController中,您有了一个寄存器操作,如下所示:
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email, IsEnabled = true };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)我在创建IsEnabled对象时添加了ApplicationUser = true。该值现在将持久化到AspNetUsers表中的新列中。
然后,您需要通过在PasswordSignInAsync中重写ApplicationSignInManager来处理该值的检查,将其作为进程中符号的一部分。
我是这样做的:
public override Task<SignInStatus> PasswordSignInAsync(string userName, string password, bool rememberMe, bool shouldLockout)
{
var user = UserManager.FindByEmailAsync(userName).Result;
if ((user.IsEnabled.HasValue && !user.IsEnabled.Value) || !user.IsEnabled.HasValue)
{
return Task.FromResult<SignInStatus>(SignInStatus.LockedOut);
}
return base.PasswordSignInAsync(userName, password, rememberMe, shouldLockout);
}您的里程可能会有所不同,您可能不想返回那个SignInStatus,但是您知道了。
发布于 2014-05-14 03:53:13
LockoutEnabled的默认User属性不是指示用户当前是否被锁定的属性。它是一个属性,指示一旦AccessFailedCount到达MaxFailedAccessAttemptsBeforeLockout值,用户是否应该处于锁定状态。即使用户被锁在门外,它也只是在LockedoutEnddateUtc属性期间禁止用户使用的唯一临时措施。因此,要永久禁用或挂起用户帐户,您可能需要引入自己的标志属性。
发布于 2014-05-01 14:05:28
您不需要创建自定义属性。诀窍是在标识用户上设置LockoutEnabled属性,并将LockoutoutEndDateUtc设置为代码中的未来日期,以锁定用户。然后,调用UserManager.IsLockedOutAsync(user.Id)将返回false。
LockoutEnabled和LockoutoutEndDateUtc都必须满足锁定用户的真日期和未来日期的标准。例如,如果LockoutoutEndDateUtc值为2014-01-01 00:00:00.000,而LockoutEnabled为true,则调用UserManager.IsLockedOutAsync(user.Id)仍将返回true。我能理解为什么微软会这样设计它,这样你就可以设定一个用户被锁在外面的时间跨度。
但是,我认为如果LockoutEnabled是true,那么如果LockoutoutEndDateUtc为NULL或将来的日期,用户就应该被排除在外。这样,您就不必在代码中担心设置两个属性(默认情况下,LockoutoutEndDateUtc是NULL )。您只需将LockoutEnabled设置为true,如果LockoutoutEndDateUtc是NULL,则用户将被无限期地锁定在外。
https://stackoverflow.com/questions/22652118
复制相似问题