.NET 4.0中的自定义MembershipProvider

这里有几条线索,但其中大多数已经过时,其中的参考链接更为过时。

我得到这个网站,我需要连接到一个外部的SQL服务器(mssql)与它自己的表结构,使用默认的asp.net成员资格提供程序结构不是一个选项。 表格布局非常简单,用法如下(称为个人)

Individuals - UserGuid (uniqueidentifier/guid, unique) - Name (varchar) - Password (varchar) - HasAccess (tinyint/ 1 or 0) - DateTime (datetime) - Log (xml) 

所需的function是简单地login某人,其余没有必要:)

我遵循了一些指南,但其中大部分已经过时而且非常复杂。 不幸的是,MSDN的例子遵循这种模式,文档不是很好。

所以如果有人有资源显示如何,或者愿意在这里张贴样本或类似的东西,我会很感激。

谢谢!

这真的很简单:

  1. 创build一个新的Class文件(如果你没有使用多层系统,在你的项目的Models文件夹中),让我们称为MyMembershipProvider.cs

  2. System.Web.Security.MembershipProviderinheritance该类

  3. 自动创build所需的方法(inheritance类中的句号+空格)

完成!

所有的方法都会有NotImplementedExceptionexception,所有你需要做的就是编辑每一个,并把你自己的代码。 例如,我如下所示定义GetUser

 public override MembershipUser GetUser(string username, bool userIsOnline) { return db.GetUser(username); } 

db是我添加到类中的数据库存储库

 MyServicesRepository db = new MyServicesRepository(); 

在那里,你会发现GetUser方法如下:

 public MembershipUser GetUser(string username) { OS_Users user = this.FindUserByUsername(username); if (user == null) return new MembershipUser( providerName: "MyMembershipProvider", name: "", providerUserKey: null, email: "", passwordQuestion: "", comment: "", isApproved: false, isLockedOut: true, creationDate: DateTime.UtcNow, lastLoginDate: DateTime.UtcNow, lastActivityDate: DateTime.UtcNow, lastPasswordChangedDate: DateTime.UtcNow, lastLockoutDate: DateTime.UtcNow); return new MembershipUser( providerName: "MyMembershipProvider", name: user.username, providerUserKey: null, email: user.email, passwordQuestion: "", comment: "ANYTHING you would like to pass", isApproved: true, isLockedOut: user.lockout, creationDate: user.create_date, lastLoginDate: user.lastLoginDate, lastActivityDate: user.lastActivityDate, lastPasswordChangedDate: user.lastPasswordChangedDate, lastLockoutDate: user.lastLockoutDate); } 

对所有使用的方法(debugging项目,看看你需要哪些)做这个 – 我只使用一些,而不是全部,因为我不太在乎像ChangePasswordQuestionAndAnswerDeleteUser等方法

只要确保在你的web.config添加新的成员身份:

 <membership defaultProvider="MyMembershipProvider"> <providers> <clear/> <add name="MyMembershipProvider" type="Your.NameSpace.MyMembershipProvider" connectionStringName="OnlineServicesEntities" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" /> </providers> </membership> 

你有一个不错的video教程来自克里斯·派尔斯(2007年,但仍然是最有效的)和代码,以及,虽然video教程是在VB中,但让我们来了解步骤…

http://www.asp.net/general/videos/how-do-i-create-a-custom-membership-provider

我不仅创build了自己的会员提供商,而且还创build了我的angular色提供商 ,正如您从上面的代码中看到的那样,就像MemberShip一样简单,让您在您的应用程序中使用以下内容:

 [Authorize(Roles = "Partner, Admin")] public ActionResult MyAction() { } 

 @if (Roles.IsUserInRole(Context.User.Identity.Name, "Admin")) { <div>You're an ADMIN, Congrats!</div> } 

什么是自动创build所需的方法(inheritance类中的时期+空间)

您可以右键单击,也可以将光标放在名称上,然后按Control + 然后空间

这里有几条线索,但其中大多数已经过时,其中的参考链接更为过时。

自Framework 1.0引入ASP.NET以来,Page.User / CurrentSession.User / IPrincipal / IIdentity模型不变。 在Framework 2.0中添加了成员​​资格提供程序。 这些“过时的”参考仍然是有效的指导。 MSDN

Interesting Posts