为SimpleMembershipProvider指定密码字段

时间:2013-11-20 15:35:00

标签: asp.net-mvc-4 simplemembership custom-membershipprovider

我正在一个小型MVC4项目中实现SimpleMembershipProvider,我已经可以使用客户提供的数据库连接初始化数据库连接,其中已经指定了用户和角色表(称为sp_person和sp_role)。

问题是,当我尝试登录时,MVC应用程序使用典型的“密码错误”错误消息拒绝我的密码,尽管我已经知道它是正确的密码。我怀疑问题是SimpleMembershipProvider不知道我在哪里存储密码(它在sp_person表中,在“ecampus_password”字段中),这就是身份验证失败的原因。

如何告诉SimpleMembershipProvider在哪里查找存储的密码?

提前致谢,

莱斯特

1 个答案:

答案 0 :(得分:1)

没关系,我发现SimpleMembershipProvider不是解决方案。在这种情况下,我应该实现自定义提供程序。

步骤如下:

  • 向项目添加实体数据模型,该模型仅使用与身份验证方案相关的表(在我的情况下,仅导入sp_personsp_role)。
  • 添加System.Web.ApplicationServices作为项目的参考。
  • 向项目添加新类,在System.Web.Security语句中指向using,并使该类继承自MembershipProviderMembershipProvider是一个抽象类,因此在被问及时实现它。
  • 在添加数据模型时,将对象添加到为您创建的实体框架类的类中(通常称为<CONNECTION_NAME>Entities,您可以在创建模型时更改该对象)。像这样:

    public class MyMembershipProvider : MembershipProvider
    {
        private MYCONNECTIONEntities db = new MYCONNECTIONEntities ();
    }
    
  • 严格来说,您可能必须在类中实现每个属性和方法,但对于auth,您必须实现ValidateUser()。只需使用LINQ查询从数据模型中检索用户即可。这是我的:

    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的{​​{1}}元素下,添加如下新的提供商:

    <authentication>
  • 编译和测试。