Asp.net mvc 4 为SimpleMembershipProvider指定密码字段
我正在一个小型MVC4项目中实现SimpleMembershipProvider,并且我已经可以使用客户提供的数据库初始化数据库连接,并且已经指定了用户和角色表(这些表称为sp_person和sp_role) 问题是,当我尝试登录时,MVC应用程序会拒绝我的密码,并显示典型的“错误密码”错误消息,尽管我已经知道它是正确的密码。我怀疑问题在于SimpleMembershipProvider不知道将密码存储在哪里(它位于sp_person表中的“ecampus_password”字段中),这就是身份验证失败的原因 如何告诉SimpleMembershipProvider在何处查找存储的密码 提前感谢,Asp.net mvc 4 为SimpleMembershipProvider指定密码字段,asp.net-mvc-4,simplemembership,custom-membershipprovider,Asp.net Mvc 4,Simplemembership,Custom Membershipprovider,我正在一个小型MVC4项目中实现SimpleMembershipProvider,并且我已经可以使用客户提供的数据库初始化数据库连接,并且已经指定了用户和角色表(这些表称为sp_person和sp_role) 问题是,当我尝试登录时,MVC应用程序会拒绝我的密码,并显示典型的“错误密码”错误消息,尽管我已经知道它是正确的密码。我怀疑问题在于SimpleMembershipProvider不知道将密码存储在哪里(它位于sp_person表中的“ecampus_password”字段中),这就是身份
Lester别担心,我发现SimpleMembershipProvider不是解决方案。在这种情况下,我应该实现一个自定义提供程序 步骤如下:
- 将实体数据模型添加到仅使用与身份验证方案相关的表的项目中(在我的示例中,仅导入
和sp_person
)sp_role
- 添加
作为项目的参考System.Web.ApplicationServices
- 向项目中添加一个新类,使用语句指向
中的
,并使该类从System.Web.Security
继承成员资格提供者
是一个抽象类,因此在需要时实现它MembershipProvider
- 在添加数据模型时,将对象添加到为您创建的实体框架类型的类中(通常称为
,您可以在创建模型时对其进行更改)。大概是这样的:实体
public class MyMembershipProvider : MembershipProvider { private MYCONNECTIONEntities db = new MYCONNECTIONEntities (); }
<membership defaultProvider="MyMembershipProvider"> <providers> <clear /> <add name="MyMembershipProvider" type="PROJECT_NAME.MyMembershipProvider"/> </providers> </membership>
- 严格来说,您可能必须实现类中的每个属性和方法,但对于auth,您必须实现
。只需使用LINQ查询从数据模型检索用户即可。这是我的:ValidateUser()
var list = from u in db.st_person where u.ecampus_login == username && u.person_password == password select u; return list.Count() > 0;
- 在
中的web.config
元素下,按如下方式添加新的提供程序:public class MyMembershipProvider : MembershipProvider { private MYCONNECTIONEntities db = new MYCONNECTIONEntities (); }
<membership defaultProvider="MyMembershipProvider"> <providers> <clear /> <add name="MyMembershipProvider" type="PROJECT_NAME.MyMembershipProvider"/> </providers> </membership>
- 编译和测试