我正在寻找一种方法来禁用用户,而不是将其从系统中删除,这是为了保持相关数据的数据完整性.但ASPNET identity似乎只提供Delete account.
有一个新的锁定功能,但似乎可以控制锁定来禁用用户,但只有在try 了一定数量的错误密码后才能将用户锁定.
还有其他 Select 吗?
我正在寻找一种方法来禁用用户,而不是将其从系统中删除,这是为了保持相关数据的数据完整性.但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
本教程确切地告诉您为您的用户添加自定义属性需要做些什么.
实际上,甚至不用看教程.
向ApplicationUser类添加属性,例如:
公共场所?IsEnabled{get;set;}
在数据库中的AspNetUsers表中添加同名的列.
轰,就是这样!
现在,在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);
}
你的里程数可能会有所不同,你可能不想返回该标志状态,但你明白了.