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