自定义SimpleMembership Provider

时间:2012-12-29 13:02:39

标签: asp.net-mvc-4 simplemembership

我在mvc4应用程序中使用简单的成员资格提供程序,我可以看到为此生成的五个表。在那我可以看到用户名和密码存储在不同的表上。我想在一些自定义字段的同一个表上保存用户名和密码。所以我通过继承ExtendingMembership Provider来创建自己的会员提供者。我对此有一些疑问。

  1. 我的应用程序使用3层架构(BLL,DAL和Presentation层),并为帐户和管理员创建了2个区域。所以在这里我不知道在哪里放置我的会员资格提供者,然后使用授权属性访问应用程序的每个部分。
  2. 我重写了这个方法CreateUserAndAccount,我是否需要实现自己的逻辑来保存用户注册数据到数据库。但我发现只传递了一些参数,如何使用字典对象将剩余的自定义字段从视图传递给控制器​​?

    public override string CreateUserAndAccount(string userName, string password, bool     requireConfirmation, IDictionary<string, object> values)
    {
        throw new NotImplementedException();
    }
    

2 个答案:

答案 0 :(得分:1)

关于问题#2:看看这个问题我本周末问过... SimpleMemership CreateUserAndAccount Customization - 特别是我在问题中链接的博客文章,因为它对扩展SimpleMembership非常有用。

答案 1 :(得分:0)

对于#1:根据需要使用DI将ExtendedMembershipProvider注入BLL图层。将它在DI配置中映射到Membership.Provider。这实际上是一个DAL,不应包含业务逻辑。最好还是围绕WebSecurity创建一个外观并将其注入到BLL中。

对于#2:是的,ExtendedMembershipProvider接口使用键/值对字典,可以使用您选择的实现将用户配置文件属性映射到数据库模式。

SimpleMembershipProvider通过将字典键映射到相应的数据库列来完成此操作。创建记录后,您可以直接使用EF和UserProfile模型管理用户数据。

实现自己的ExtendedMembershipProvider是很多工作,我不推荐它。与传统迭代相比,SimpleMembershipProvider模式相对简洁,我认为您需要将密码列移动到用户表的原因,而不是仅仅将SimpleMembershipProvider配置为使用您自己的模式,并将密码保留在正确所属的位置。