繁体   English   中英

如何在我的域模型中实现ASP.NET成员资格提供程序

[英]How to implement ASP.NET membership provider in my domain model

在网站中,我需要集成成员身份和身份验证。 所以我想使用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等。

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

HTH。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM