【问题标题】:MVC 5 Custom UserStoreMVC 5 自定义用户存储
【发布时间】:2014-01-06 14:13:12
【问题描述】:

我需要构建一个自定义 UserStore(主要是因为我有一些默认情况下不属于框架的要求),但我在任何地方都找不到有关如何执行此操作的任何文档。

我看到了两条接近的信息:

  1. http://kazimanzurrashid.com/posts/implementing-user-confirmation-and-password-reset-with-one-asp-dot-net-identity-pain-or-pleasure - 这似乎适用于早期版本:(
  2. MVC 5 IoC and Authentication - 这与我需要的类似,但我需要查看一些代码:(

基本上我需要知道如何创建用户以及如何登录。其余的我可以弄清楚。我想主要问题是处理密码等。

有没有人知道任何可能对我有帮助的文档? 或者,如果默认 UserStore 出现故障并且它的内部方法会很棒(我可以从那里适应)。

【问题讨论】:

  • 第一个链接好像失效了..

标签: c# asp.net asp.net-mvc asp.net-mvc-5


【解决方案1】:

这其实并不难。

创建一个实现 IUserStore 接口的新类。

public class MyUserStore : IUserStore<User> { }

...然后实现它的方法。我认为一开始有 5 或 6 个,用于处理创建/更新/删除/查找用户。如果您正在为您的用户实体使用实体框架,那么只需构造函数将它的一个实例注入您的用户存储实例。

public class MyUserStore : IUserStore<User>
{
    private readonly MyDbContext _dbContext;
    public MyUserStore(MyDbContext dbContext) { _dbContext = dbContext; }
}

然后,在接口方法中,只需委托给您的 dbcontext:

Task IUserStore<User>.CreateAsync(User user)
{
    _dbContext.Set<User>().Create(user);
    return Task.FromResult(0);
}

您可以实现许多其他可选接口来支持附加功能。例如,如果您希望您的 UserStore 能够为您处理密码加密,请实现 IUserPasswordStore:

public class MyUserStore : IUserStore<User>, IUserPasswordStore<User> { }

...对于其他接口,如 IUserRoleStore 等,以此类推。

真正有用的是反编译工具,例如 .NET Reflector 或 ReSharper 的 Navigate To Decompiled Sources 功能。如果您反编译 Microsoft.AspNet.Identity.EntityFramework 库中的默认 UserStore,您可以看到他们是如何做到的。一些反编译的代码可能难以阅读,因为其中一些方法是异步的,但您应该了解它的要点。

【讨论】:

  • 谢谢,这是个好主意。我将看看.Net Reflector。我真的可以看看 .Net 附带的一些功能。干杯
  • 注意如果你使用Reflector,它可能无法反编译每一个方法。我自己尝试过,看看是否能比 ReSharper 获得更好的阅读效果,但结果是 Reflector 在反编译异步方法时遇到了一些问题。
  • 我下载了 ILSpy,它似乎反编译得很好,但是如果有什么不能用的东西我会在这里发布:D
  • UserStore 中有很多独特的接口,因此通过注入特定接口为特定任务创建 UserManager 可能是个好主意。例如,我将创建一个 UserManager 仅注入 IQueryableUserStore 来替换我通常使用 EF 方法进行数据库持久性的存储库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
相关资源
最近更新 更多