为啥 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&lt;TUser&gt; 接口中移除。

在这一点上,我的结论是,它可以根据您的需要和您想要的方式实现,并且它只会被您的应用程序代码或未来的用户管理库调用。

【问题讨论】:

【参考方案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 不支持删除的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 Asp.Net Core 日志中出现“不支持 POST 请求”?

ASP.NET Identity 2.0 注销不起作用

将ASP.NET Identity模型移动到类库

ASP.Net Identity 2 使用 SMS 密码登录 - 不使用双因素身份验证

Controller.User 在 ASP.NET MVC 5 上由 ASP.NET Identity 设置不一致

使用 ASP.NET 标识时删除 ReturnUrl