我想要构建一个简单的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 Custom UserStore中的示例,具体为
public class MyUserStore : IUserStore<User> { }
我不知道用户应该是什么类型。我认为这是我需要创建一个特定界面的类(我猜测IUser)。我已经为这种未知用户类型尝试了几十种变体,但无论在我尝试在IndentityCofig.us中实现以下内容时会发生什么?
var us = new XmlUserStore<???>(someXmlDoc);
var manager = new ApplicationUserManager(us);
我收到语法错误,告诉我非泛型类型MyXmlStore不能与类型参数一起使用。
答案 0 :(得分:2)
是的,应该这样做,基本上实现一个XmlUserStore并将其插入那里,你应该好好去。
答案 1 :(得分:1)
对于那些想要使用MVC5应用程序的人来说,#34;开箱即用&#34;但是只需要一些你想手动控制的用户,我在github上提供了一个完整的示例应用程序:
git clone https://github.com/FutureTense/stackoverflow.com-questions-24315079-modifying-a-default-mvc5-project-to-use-a-custom-usersto
我基本上创建了一个从XML文件中读取的新 UserStore 实现。我建议你查看每个文件的差异,看看原始MVC应用程序中有什么变化来使用这个新商店。
第一次提交只是一个默认的MVC5应用程序,它使用EntityFramework作为Asp.Net身份凭证的持久性引擎。第二次提交向称为 XmlUserStore 的解决方案添加了一个新项目,该项目将从Xml文件中读取用户凭据。 注意:这只从文件中读取凭据。大多数其他接口将抛出一个&#34;未实现&#34;例外。然后我用Xml版本替换了EF版本的UserStore。
您可以轻松完成这些存根以使整个凭据系统使用XML文件,但由于我只需要从XML中读取,这对我的目的来说已经足够了。理想情况下,您还将删除大多数尚未实现的AcccountController方法。
身份验证文件位于〜/ App_Data / Users.xml中,您可以在那里手动添加/删除用户(带有角色)。是的,它不是很安全(你应该阻止浏览器访问这个文件),但这只是一个例子。密码也以明文形式存储。您可以通过修改 PasswordHasher 类来更改此设置,以使用您想要的任何哈希实现。