Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 为SimpleMembershipProvider指定密码字段_Asp.net Mvc 4_Simplemembership_Custom Membershipprovider - Fatal编程技术网

Asp.net mvc 4 为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”字段中),这就是身份

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

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

如何告诉SimpleMembershipProvider在何处查找存储的密码

提前感谢,


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,您必须实现
    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
    中的
    元素下,按如下方式添加新的提供程序:

    public class MyMembershipProvider : MembershipProvider
    {
        private MYCONNECTIONEntities db = new MYCONNECTIONEntities ();
    }
    
    <membership defaultProvider="MyMembershipProvider">
      <providers>
        <clear />
        <add name="MyMembershipProvider" type="PROJECT_NAME.MyMembershipProvider"/>
      </providers>
    </membership>
    
    
    
  • 编译和测试


SimpleMembership附带了一组默认的表,您是否更改了它们?我没有更改任何其他内容,是吗?谷歌什么也没给我。据我所知,SimpleMembership可以处理一些表,但主要的表是UserProfile(你可以编辑这个表,默认情况下它有UserId和userName)和_成员身份(它有UserId和所有与用户登录相关的信息)。可能是你的登录功能与你的会员资格不符,而不是你认为应该取消的。我建议使用此成员表存储密码和登录相关信息。让我知道事实上,其中一个要求是我不能以任何方式改变数据库结构。我无法添加新表或更改其存储数据的方式。我被迫使用这两个表进行身份验证。