Asp.net mvc 4 自定义SimpleMembership提供程序

Asp.net mvc 4 自定义SimpleMembership提供程序,asp.net-mvc-4,simplemembership,Asp.net Mvc 4,Simplemembership,我在mvc4应用程序中使用简单的成员资格提供程序,我可以看到为此生成的五个表。我可以看到用户名和密码存储在不同的表中。我想用一些自定义字段将用户名和密码保存在同一个表中。因此,我通过继承ExtendingMembershipProvider创建自己的成员资格提供程序。我对此有一些疑问 我的应用程序使用三层架构(BLL、DAL和表示层),并为account和admin创建了两个区域。所以在这里我不知道在哪里放置我的会员资格提供者,然后使用Authorize属性访问应用程序的每个部分 我正在重写这个

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

  • 我的应用程序使用三层架构(BLL、DAL和表示层),并为account和admin创建了两个区域。所以在这里我不知道在哪里放置我的会员资格提供者,然后使用Authorize属性访问应用程序的每个部分
  • 我正在重写这个方法CreateUserAndAccount,我是否需要实现自己的逻辑来将用户注册数据保存到数据库中。但是我发现只传递了一些参数,如何使用dictionary对象将剩余的自定义字段从视图传递到控制器

    public override string CreateUserAndAccount(string userName, string password, bool     requireConfirmation, IDictionary<string, object> values)
    {
        throw new NotImplementedException();
    }
    
    public重写字符串CreateUserAndAccount(字符串用户名、字符串密码、布尔要求确认、IDictionary值)
    {
    抛出新的NotImplementedException();
    }
    
  • 至于问题#2:看看我这个周末问的这个问题…-特别是我在问题中链接的博客文章,因为它对扩展SimpleMembership非常有帮助。

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

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

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

    实现自己的
    ExtendedMembershipProvider
    需要大量工作,我不推荐这样做。与旧式迭代相比,
    SimpleMembershipProvider
    模式相对干净,我认为您需要一个很好的理由将密码列移动到用户表,而不仅仅是将
    SimpleMembershipProvider
    配置为使用您自己的模式,并将密码保留在正确的位置