【问题标题】: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; 接口中移除。

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

【问题讨论】:

    标签: asp.net visual-studio-2013 asp.net-mvc-5 asp.net-identity


    【解决方案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)
    猜你喜欢
    • 2016-04-26
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多