我不确定我是否应该与MVC做任何不同,但我很好奇在使用成员资格提供程序时,为ASP.NET用户帐户添加额外信息的建议方法是什么?还有如何将此用途与其他实体相关联。
通常我不打扰配置文件,并且更喜欢向仅引用USERID的表添加额外信息。对于ASP.NET MVC方法,这是好/坏/可接受的,还是可以替代的呢?
答案 0 :(得分:10)
这是一个很好的问题,也是我一直在努力的问题。我认为有三种基本方法;
使用配置文件提供程序 - 这样可以轻松添加属性,但很容易执行生成用户表等操作,尤其是在需要应用过滤器/搜索时。 API只是没有削减它。
添加新表(或扩展现有表),然后加入此表。然后,您需要编写自己的方法来获取自定义数据。
编写扩展MembershipProvider类的会员提供程序。
对于我上一个项目,我使用后一种方法 - 我写了一个非常quck的SQL提供程序,它只实现了创建用户,身份验证和更改密码所需的基本要素。对于其余的虚拟方法,我只是扔了一个NotImplementedException
。
然后我添加了一个新类,它添加了我需要的额外属性并使其成为可以通过传入标准MembershipUser
来实例化的。像这样:
public static CustomMember GetMember(MembershipUser user)
{
// Get your custom member
}
这样你可以在大多数情况下使用标准的MembershipUser,但如果你需要获得有关当前用户的更多细节,你可以这样做:
MembershipUser user = Membership.GetUser();
CustomMember member = CustomMember.GetMember(user);
但是,我有兴趣看看其他人的方法是什么。
答案 1 :(得分:1)
您使用MVC的事实不应对您处理会员资格和“用户数据”的方式产生任何重大影响。
我通常也会避免使用ASP.NET配置文件,实际上是默认的ASP.NET成员资格,更喜欢滚动我自己的成员资格提供程序和链接到我现有用户表的“配置文件”架构。
如果您对有关客户会员提供商的更多信息感兴趣,请发表评论。
答案 2 :(得分:0)
我希望看到有关此主题的更多反馈以及人们的行为。我目前在asp.net mvc应用程序中使用标准的asp.net成员资格/角色提供程序系统并且不喜欢它。
我的方法是改变aspnet_users表并添加一大堆额外的列; CompanyId,StreetAddress等。
我存储了用户个人资料设置,了解他们如何在标准资料中使用网站;他们使用什么主题,分页列表显示的记录数和其他内容。
正如大多数人所发现的那样,获取信息内外的信息是一种痛苦,而且由于序列化,我在大型系统中阅读的内容可能会成为性能瓶颈。
我倾向于在我的表上滚动,以更好地匹配我的应用程序架构,实现自定义sql提供程序,然后在asp.net mvc中编写一些额外的安全属性,如果我需要它们。