0

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

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

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

提前致谢,

莱斯特

4

1 回答 1

1

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

步骤如下:

  • 将实体数据模型添加到仅使用与身份验证方案相关的表的项目中(在我的情况下,仅导入sp_personsp_role)。
  • 添加System.Web.ApplicationServices作为对项目的引用。
  • System.Web.Security向项目中添加一个新类,在语句中指向using并让该类继承自MembershipProvider. MembershipProvider是一个抽象类,所以当被问到时实现它。
  • 添加数据模型时为您创建的实体框架类型的类添加一个对象(通常称为<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下,添加新的提供者,如下所示:<authentication>

    <membership defaultProvider="MyMembershipProvider">
      <providers>
        <clear />
        <add name="MyMembershipProvider" type="PROJECT_NAME.MyMembershipProvider"/>
      </providers>
    </membership>
    
  • 编译和测试。

于 2013-11-21T10:59:29.210 回答