为啥 ASP.Net Identity 不支持删除
Posted
技术标签:
【中文标题】为啥 ASP.Net Identity 不支持删除【英文标题】:Why's Delete not supported in ASP.Net Identity为什么 ASP.Net Identity 不支持删除 【发布时间】:2013-10-28 06:35:40 【问题描述】:我正在修补最近 RTM 与 Visual Studio 2013 一起提供的新身份验证功能。
在实现自定义 UserStore 时,我查看了包装盒中提供的 UserStore 的反编译源代码Microsoft.AspNet.Identity.EntityFramework.UserStore<TUser>
。我注意到不支持删除用户的方法:
public class UserStore<TUser> : IUserLoginStore<TUser>, IUserClaimStore<TUser>, IUserRoleStore<TUser>, IUserPasswordStore<TUser>, IUserSecurityStampStore<TUser>, IUserStore<TUser>, IDisposable where TUser : IdentityUser
// other stuff omitted
public virtual Task DeleteAsync(TUser user)
throw new NotSupportedException();
这很奇怪不是吗?为什么不支持删除用户?
我承认我不记得我写过的生产系统硬删除了用户记录,但我不明白为什么不支持此功能。
是否有技术原因,或者仅仅是因为 Microsoft 认为删除用户记录是“不好的”,并将其留作开发人员重写该方法的练习?
更新
为了了解 ASP.NET 团队的想法,我搜索了 DeleteAsync(TUser user)
的框架用法。框架中似乎没有任何东西调用它。因此,他们似乎完全可以将成员从 IUserStore<TUser>
接口中移除。
在这一点上,我的结论是,它可以根据您的需要和您想要的方式实现,并且它只会被您的应用程序代码或未来的用户管理库调用。
【问题讨论】:
【参考方案1】:删除用户帐户
在 1.0 中,如果你必须删除一个用户,你不能通过 UserManager 来完成。他们现在已经用 2.0 修复了它:
var result = await UserManager.DeleteAsync(user);
见http://blogs.msdn.com/b/webdev/archive/2014/03/20/test-announcing-rtm-of-asp-net-identity-2-0-0.aspx
【讨论】:
除非您首先需要从任何活动角色中删除用户,否则DeleteAsync
将失败。
正确,但您始终可以更改数据库关系,强制用户和角色之间的“级联删除”。我没试过,但它会工作
对我来说默默地失败了。用户没有从数据库中删除:(【参考方案2】:
我们刚刚没时间完成 1.0 版,它将作为其他与管理员相关的 api 的一部分添加到更新 1 中,例如 UserManager 上的 IQueryable Users 属性。 (它已经在 nightly 1.1-alpha1 包中实现)
【讨论】:
很公平。在那种情况下,为什么不NotImplementedException
?语义,我知道,但它似乎更合适。顺便说一句,在新的身份验证系统上做得很好。我编写了一个与 RavenDB 一起使用的自定义用户存储。我将它插入开箱即用的 UserManager 中,它的工作方式完全符合我的预期。
我今天一直在看这个。 ASP.NET Identity (v1.1) 的下一个版本是否有预定日期?最好使用内置的 Delete 函数而不是自己实现!
我们很快就会推出 Alpha 版(由于 EF 模型级别的一些重大更改,它现在是 2.0 而不是 1.1)以上是关于为啥 ASP.Net Identity 不支持删除的主要内容,如果未能解决你的问题,请参考以下文章