Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在我的域模型中实现ASP.NET成员资格提供程序_Asp.net_Architecture_Asp.net Membership - Fatal编程技术网

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

如何在我的域模型中实现ASP.NET成员资格提供程序,asp.net,architecture,asp.net-membership,Asp.net,Architecture,Asp.net Membership,在网站中,我需要集成成员资格和身份验证。所以我想使用ASP.NET成员资格的功能,但我有其他自定义的东西,这是“用户”必须做的 所以我坐在这里,拿着我的铅笔和纸,为我的领域模型画线。。。我怎样才能最好地利用ASP.Net成员资格,同时扩展它以满足我的需要 我是否应该创建一个从MembershipUser继承的类,并使用自己的属性和方法对其进行扩展(并将其保存在单独的表中)。或者我应该让MembershipUser成为自定义用户/客户端对象上的属性吗 做这件事的好方法是什么?我已经扩展了Membe

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

所以我坐在这里,拿着我的铅笔和纸,为我的领域模型画线。。。我怎样才能最好地利用ASP.Net成员资格,同时扩展它以满足我的需要

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


做这件事的好方法是什么?

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

MembershipUser本质上是我的用户表上的一个视图。我的ExtendedMembershipUser类包含配置文件/帐户样式的属性,而不是使用默认的SqlProfileProvider系统,后者有点脆弱

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

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


HTH.

我已经考虑过了,有两种方法似乎是合适的(当然还有更多的方法可以让它工作)

自定义成员资格提供程序 您可以将成员资格提供程序更改为使用自己的,并使用用户对象存储所有信息

这一个的问题是,它涉及到许多已经由Asp.Net很好地处理的事情的重新实现。好的是,您有一个包含所有细节的单一用户对象

从会员用户链接到您的用户 使用此方法,您可以使用原始成员资格提供程序来处理用户名和密码,但您可以使用服务(例如)将您自己的用户对象与此用户对象链接到类似用户名的对象

设置起来非常简单,您只需创建一个服务,该服务的使用方式如下:

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

我最终编写了自己的会员资格提供商,并在3个不同的解决方案中实现了这一点。它非常简单,比将用户链接到membershipUser(我也尝试过)要优雅得多

读这个…:


如果您想了解更多信息,请观看。

我目前正在阅读《代码》杂志的文章,该文章解释了如何通过围绕现有类编写包装来扩展成员API。主要的好处是,您可以保留所有现成的功能,而不必像实现自定义提供程序时那样重写自己的功能。提供了源代码。

您是否介意评论一下这样做的影响,以及您失去了什么。您是否丢失了任何cookie跟踪功能或管理控制台集成。并不是说管理控制台特别棒,但至少它是有意义的。我失去了管理控制台,我从来没有使用过它。当然,我失去了aspnet成员资格提供者的所有功能(更改密码、存储内容等)。但是我再也不会在我关心的任何事情上实现aspnet成员资格提供者。我不知道你说的“丢失cookie跟踪功能”是什么意思。据我所知,我没有丢失任何东西你最后用了哪种方法?另外,您如何处理有人更改用户名/电子邮件的情况?这是我目前实现中最大的漏洞之一。我更喜欢第二个选项,尽管我没有太多地使用这两个选项。用户名/电子邮件不应该是IMO的用户标识符,而是每个用户都应该有一个标识符(数字或guid),并且用户名/电子邮件应该是唯一的。