我正在一个小型MVC4项目中实现SimpleMembershipProvider,我已经可以使用客户提供的数据库连接初始化数据库连接,其中已经指定了用户和角色表(称为sp_person和sp_role)。
问题是,当我尝试登录时,MVC应用程序使用典型的“密码错误”错误消息拒绝我的密码,尽管我已经知道它是正确的密码。我怀疑问题是SimpleMembershipProvider不知道我在哪里存储密码(它在sp_person表中,在“ecampus_password”字段中),这就是身份验证失败的原因。
如何告诉SimpleMembershipProvider在哪里查找存储的密码?
提前致谢,
莱斯特
答案 0 :(得分:1)
没关系,我发现SimpleMembershipProvider不是解决方案。在这种情况下,我应该实现自定义提供程序。
步骤如下:
sp_person
和sp_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
的{{1}}元素下,添加如下新的提供商:
<authentication>
编译和测试。