修改默认MVC5项目以使用自定义UserStore



我打算构建一个简单的MVC应用程序,用一个读取/写入XML文件的应用程序来替换EntityFramework持久性。我不需要任何花哨的角色或声明,我只需要确保用户经过身份验证。

根据我的研究,我认为我需要创建一个自己的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;
        }
    }

编辑:

我在尝试创建这个自定义UserStore时遇到了问题,遵循MVC 5自定义UserStore中的示例,特别是

public class MyUserStore : IUserStore<User> { }

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

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

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

是的,应该这样做,基本上实现一个XmlUserStore并将其插入其中,然后就可以开始了。

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

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

我基本上创建了一个新的UserStore实现,它从XML文件中读取。我建议您查看每个文件的diff,看看原始MVC应用程序在使用这个新存储时发生了什么变化。

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

您可以很容易地完成这些存根,使整个凭证系统能够使用XML文件,但由于我只需要从XML中读取,因此这对我来说已经足够了。理想情况下,您还应该删除大多数未实现的AcccountController方法。

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

相关内容

  • 没有找到相关文章

最新更新