【问题标题】:Modifying a default MVC5 project to use a custom UserStore修改默认 MVC5 项目以使用自定义 UserStore
【发布时间】:2014-08-10 11:48:31
【问题描述】:

我正在尝试构建一个简单的 MVC 应用程序,该应用程序将 EntityFramework 持久性替换为读取/写入 XML 文件的持久性。我不需要任何花哨的东西,比如角色或声明,我只需要确保用户经过身份验证。

根据我的研究,我认为我需要创建一个自己的 UserStore 并修改 IdentityConfig.cs 中的以下代码以改用此自定义 UserStore。这是正确的方法吗?对我来说,这似乎是一个经典的依赖注入解决方案。创建 UserStore 的新实现并将其注入 ApplicationUserManager。

   public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) 
        {
            var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
            // Configure validation logic for usernames
            ...
            return manager;
        }
    }

编辑:

按照MVC 5 Custom UserStore 中的示例,我在尝试创建这个自定义用户存储时遇到了麻烦,特别是

public class MyUserStore : IUserStore<User> { }

我不知道 User 应该是什么类型。我假设这是一个我需要创建实现特定接口的类(我猜是 IUser)。我已经为这种未知的用户类型尝试了几十种变体,但是当我尝试在 IndentityCofig.us 中实现以下内容时会发生什么

        var us = new XmlUserStore<???>(someXmlDoc);
        var manager = new ApplicationUserManager(us);

我收到一个语法错误,告诉我非泛型类型 MyXmlStore 不能与类型参数一起使用。

【问题讨论】:

    标签: dependency-injection asp.net-mvc-5 asp.net-identity


    【解决方案1】:

    是的,应该这样做,基本上实现一个 XmlUserStore 并将其插入其中,你应该很高兴。

    【讨论】:

      【解决方案2】:

      对于那些想要“开箱即用”地使用 MVC5 应用程序但只需要手动控制几个用户的人,我在 github 上提供了一个完整的示例应用程序:

      git clone https://github.com/FutureTense/stackoverflow.com-questions-24315079-modifying-a-default-mvc5-project-to-use-a-custom-usersto
      

      我基本上创建了一个从 XML 文件读取的新 UserStore 实现。我建议您查看每个文件的差异,以了解原始 MVC 应用程序中的哪些更改以使用这个新存储。

      第一次提交只是一个使用 EntityFramework 作为 Asp.Net 身份凭证的持久引擎的默认 MVC5 应用程序。第二次提交将一个名为 XmlUserStore 的新项目添加到解决方案中,该项目将从 Xml 文件中读取用户凭据。 注意:这仅读取文件中的凭据。大多数其他接口将抛出“未实现”异常。然后我用 Xml 版本替换了 EF 版本的 UserStore。

      您可以轻松完成这些存根,让整个凭证系统使用 XML 文件,但由于我只需要从 XML 中读取,这对于我的目的来说已经足够了。理想情况下,您还应该删除大部分未实现的 AccountController 方法。

      身份验证文件位于 ~/App_Data/Users.xml 中,您可以在那里手动添加/删除用户(带有角色)。是的,它不是很安全(你应该阻止浏览器访问这个文件),但这毕竟只是一个例子。密码也以明文形式存储。您可以通过修改 PasswordHasher 类来更改此设置,以使用您想要的任何哈希实现。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-20
        相关资源
        最近更新 更多