我正在寻找一种方法来禁用用户,而不是将其从系统中删除,这是为了保持相关数据的数据完整性.但ASPNET identity似乎只提供Delete account.

有一个新的锁定功能,但似乎可以控制锁定来禁用用户,但只有在try 了一定数量的错误密码后才能将用户锁定.

还有其他 Select 吗?

推荐答案

当您创建一个安装了标识位的站点时,您的站点将有一个名为"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

那里的 comments 中有一个很好的链接,为方便起见,请单击here

本教程确切地告诉您为您的用户添加自定义属性需要做些什么.

实际上,甚至不用看教程.

  1. 向ApplicationUser类添加属性,例如:

    公共场所?IsEnabled{get;set;}

  2. 在数据库中的AspNetUsers表中添加同名的列.

  3. 轰,就是这样!

现在,在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)

我在创建ApplicationUser对象时添加了IsEnabled=true.现在,该值将保存在AspNetUsers表的新列中.

然后,您需要在登录过程中通过重写ApplicationSignInManager中的PasswordSignInAsync来判断该值.

我是这样做的:

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);
    }

你的里程数可能会有所不同,你可能不想返回该标志状态,但你明白了.

Asp.net相关问答推荐

为什么 @Html.EditorFor 和 @Html.PasswordFor 在 MVC 中创建不同的样式框?

无法加载文件或程序集.无效指针(HRESULT 异常:0x80004003 (E_POINTER))

如何向 Array.IndexOf 添加不区分大小写的选项

Azure 自定义控制器/API .Net 后端

asp.net dropdownlist - 在 db 值之前添加空行

为什么我在安装 IE8 后无法从 Visual Studio 2005 调试?

在 RedirectToAction 调用中传播 QueryString 参数

如何在集线器类之外获取 SignalR 用户连接 ID?

正在检索组件的 COM 类工厂......错误:80070005 访问被拒绝. (来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))

如何通过后面的代码不显示

如何获取 ASP.NET 应用程序的完整虚拟路径

在 ASP.NET MVC 中使用 Razor 创建可重用的 HTML 视图组件

如何在 ASP.NET 站点中添加 favicon.ico

缩小 ASP.Net MVC 应用程序的 HTML 输出

InvalidOperationException:无法为角色创建 DbSet,因为此类型未包含在上下文模型中

路由模板分隔符/不能连续出现 - 属性路由问题

在 Application_BeginRequest 中设置会话变量

System.Linq.IQueryable 不包含Where的定义

配置授权服务器端点

将字符串转换为时间