c# - 如何禁用 Identity 2.0 中的用户?

标签 c# asp.net asp.net-identity asp.net-identity-2

我正在尝试找到一种方法来禁用 Identity 2.0 中的用户,但似乎找不到任何相关信息。

我基本上想将用户设置为 IsActive=false,并且希望在创建用户后立即执行此操作。但是,我需要一种方法来为我们的站点管理员设置 IsActive。我已经拥有 ASP.Net 成员(member)资格,但我希望将网站转换为 MVC 和 Identity。

根据我的要求,我们要求人们继续注册一个帐户,但我们希望它在默认情况下被禁用。然后,当我们收到加入的付款时,我们将返回并启用它们。我们还使用它在订阅到期且未续订时禁用用户。

有没有办法在不删除帐户的情况下禁用帐户或仅将其锁定 X 时间?到目前为止,我还没有找到任何方法来禁用 Identity 中的用户,我很惊讶以前没有出现过这个问题。

最佳答案

当您创建一个安装了身份位的站点时,您的站点将有一个名为“IdentityModels.cs”的文件。在这个文件中有一个名为 ApplicationUser 的类,它继承自 IdentityUser。

// You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.
public class ApplicationUser : IdentityUser

那里的评论有一个很好的链接,轻松点击here

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

实际上,根本不用看教程。

1) 为ApplicationUser类添加一个属性,例如:

public bool? IsEnabled { get; set; }

2) 在您的数据库中的 AspNetUsers 表中添加一个具有相同名称的列。

3) 砰,就是这样!

现在在您的 AccountController 中,您有一个 Register 操作,如下所示:

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

您的里程可能会有所不同,您可能不想返回该 SignInStatus,但您明白了。

关于c# - 如何禁用 Identity 2.0 中的用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32951260/

相关文章:

c# - 允许用户使用电子邮件或用户名 (AspNet.Identity) 登录

c# - 将数据库上下文移动到 DAL 类库后的 .Net Core 2.0 Web Api 循环依赖

c# - 无法从 IEnumerable<T> 转换为 ICollection<T>

css - 在 ASP.NET 中强制 Gridview 标题字体粗体为 false

c# - WCF ServiceActivationException 混淆

.net - 在 Silverlight 和 ASP.NET 之间混合应用程序模块

c# - ASP.NET 中的两种数据绑定(bind)方式

asp.net-mvc - 在多个Web应用程序上使用ASP.Net Identity

C#:以编程方式检测 Windows Server 已启动

c# - 如何使用 dotnet 在命令行中传递参数?