将额外信息与ASP.NET MVC Membership相关联

14

我不确定在MVC中是否应该以不同的方式进行操作,但我很好奇在使用Membership提供程序时向ASP.NET用户帐户添加额外信息的推荐方法是什么?还有如何将此用户与其他实体关联。

通常我不会理会配置文件,而是更喜欢向简单地引用USERID的表中添加额外信息。这对于ASP.NET MVC方法来说好/坏/可接受,还是有其他替代方案?

3个回答

10

这是一个好问题,我也曾经苦恼过。我认为有三种基本方法:

  1. 使用个人资料提供程序 - 这使添加属性变得容易,但如果需要应用过滤器/搜索,生成用户表格等操作则变得繁琐。API 无法胜任。

  2. 添加一个新的表(或扩展现有表格),然后加入它。然后您将需要编写自己的方法来获取自定义数据。

  3. 编写自己的成员身份提供程序,继承 MembershipProvider 类。

对于我的最后一个项目,我使用了最后一种方法 - 我编写了一个非常快速的 SQL 提供程序,仅实现了创建用户、身份验证和更改密码所需的基本要素。对于其余的虚拟方法,我只抛出了一个 NotImplementedException

然后,我添加了一个新的类来添加我所需的额外属性,并使其可以通过传递标准的 MembershipUser 来实例化。像这样:

public static CustomMember GetMember(MembershipUser user)
{
    // Get your custom member
}

这样你就可以在大多数情况下使用标准的MembershipUser,但是如果需要获取当前用户的更多详细信息,可以采用以下方式:

MembershipUser user = Membership.GetUser();
CustomMember member = CustomMember.GetMember(user);

不过我很感兴趣看看其他人的方法是什么。


谢谢回复。我喜欢你的方法。我也很想知道别人的想法。 - Dkong
我不确定你是如何“混合和匹配”成员提供程序的,CustomMember.GetMember()肯定会从某个自定义表中提取数据,而Membership.GetUser()则会在默认的asp_users表上操作? - greenimpala
嘿,谢谢你的建议。但是有关于选择这些方法的文章或最佳实践吗?如果有这样的链接,我会非常感激。 - Johnny_D
现在我会考虑使用ASP .NET Simple Membership,它解决了提供程序模型的许多问题 - http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5-web-forms-and-asp-net-mvc-4-templates.aspx - Dan Diplo

1

使用MVC不应对处理会员和“用户数据”的方式产生任何重大影响。

我通常也避免使用ASP.NET Profiles,以及默认的ASP.NET Membership,而是更喜欢自己编写会员提供程序和与现有用户表相关联的“配置文件”架构。

如果您对客户会员提供程序的进一步信息感兴趣,请发表评论。


0

我很想看到更多有关这个主题的反馈和人们的做法。目前,我在一个asp.net mvc应用程序中使用标准的asp.net成员身份验证/角色提供程序系统,但并不喜欢它。

我的方法是修改aspnet_users表格,并添加一堆额外的列;CompanyId、StreetAddress等。

我将用户在网站上的使用设置存储在标准配置文件中;他们使用什么主题、分页列表显示多少条记录以及其他一些东西。

正如大多数人所发现的那样,从配置文件中获取信息和导出信息都很麻烦,而且据我所读,在大型系统中,由于序列化,这可能会成为性能瓶颈。

我倾向于滚动我的表格,以更好地匹配我的应用程序架构,实现自定义SQL提供程序,然后查看是否需要编写一些额外的asp.net mvc安全属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接