在网站中,我需要整合会员资格和身份验证。所以我想使用ASP.NET Membership的功能,但我有其他自定义的东西,即“用户”,必须做。

所以我坐在这里用我的铅笔和纸,为我的领域模型画线......我怎样才能最好地利用ASP.Net会员资格,但是扩展它以满足我的需求?

我应该创建一个继承自MembershipUser的类,并使用我自己的属性和方法扩展它(并将其保存在单独的表中)。或者我应该让MembershipUser成为我的自定义用户/客户端对象的属性吗?

这样做有什么好办法?

有帮助吗?

解决方案

我已经考虑过了,并且有两种看似合适的方法(当然还有更多方法可以让它发挥作用)。

自定义成员资格提供程序

您更改会员提供者以使用您自己的会员提供者,并使用您的User对象存储所有信息。

这个问题是它涉及很多重新实现Asp.Net已经很好处理的事情。好消息是你有一个包含所有细节的User对象。

从会员用户链接到您的用户

使用此方法,您可以使用原始成员资格提供程序来处理用户名和密码,但是您可以使用服务将自己的User对象与用户名称链接起来。

设置起来非常简单,只需要创建一个像这样使用的服务:

string userName = "Jon Skeet";
User user = new UserManagementServices().GetUserByUserName(userName);

其他提示

我最终编写了自己的会员提供商,现在已经在3个独立的解决方案中实现了这一点。它非常简单,比将用户链接到MembershipUser(我也尝试过)更加优雅。

阅读本文......:

为ASP.NET网站安全创建自定义成员资格提供程序

如果您想了解更多信息,请观看此视频(带源代码)

我已经扩展了MembershipUser并创建了我自己的SqlMembershipProvider版本,以便映射到我现有的域,并且它现在正在生产中运行良好。

MembershipUser本质上是我的User表的视图。我的扩展MembershipUser类包括配置文件/帐户样式属性,而不是使用默认的SqlProfileProvider系统,这个系统有点脆弱。

我无法使用现有的会员表或sprocs,但写了我自己的。例如,SqlMembershipProvider使用GUID作为不透明键,但生产系统使用普通的旧int。所有日期也是UTC等。

所有额外的用户功能都可以通过用户域访问,而不是通过成员身份方法访问。

HTH。

我目前正在使用 Microsoft ASP.NET 2.0 Membership API来自CoDe Magazine的扩展文章解释了如何通过在现有类周围编写包装来扩展成员资格API。主要好处是您可以保留所有开箱即用的功能,而不必像实现自定义提供程序那样重写自己的功能。提供源代码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top