向Identity users表添加软删除

我已将删除的列添加到我的Users表中,但显然注册Identity框架提供的新用户方法仍然会在数据库中看到这些用户,有没有办法告诉它忽略某个列?

注册

// this needs to ignore any DeletedAt where not null var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { ... } 

在登录

 // this needs to ignore any DeletedAt where not null result = await SignInManager.PasswordSignInAsync( user.UserName, model.Password, model.RememberMe, shouldLockout: true ); 

…还有任何其他外部登录事件需要告知列。

在您的signInManager内部覆盖SignInAsync方法,这个方法用于每个登录进程(本地或外部)

 public class ApplicationSignInManager : SignInManager { public override async Task SignInAsync(User user, bool isPersistent, bool rememberBrowser) { if (!user.isDeleted) { await base.SignInAsync(user, isPersistent, rememberBrowser); } else { ... } } } 

或者创建一个自定义UserStore并覆盖GetUserAggregateAsync方法(在所有“find”方法中调用它):

 public class CustomUserStore : UserStore { public CustomUserStore(ApplicationDbContext context) : base(context) { } protected override async Task GetUserAggregateAsync(Expression> filter) { var user = await base.GetUserAggregateAsync(filter); // if user is found but soft deleted then ignore and return null if (user != null && user.IsDeleted) { return null; } return user; } }