非常简单:
创建一个新的类文件(如果您没有使用多层系统,则在项目的Models文件夹中),命名为MyMembershipProvider.cs
从System.Web.Security.MembershipProvider
继承该类
自动创建所需的方法(在继承类中添加句号和空格)
完成!
所有方法都将有NotImplementedException
异常,您只需要编辑每个方法并放入您自己的代码即可。例如,我定义了以下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);
}
针对您使用的所有方法执行此操作(调试项目并查看您需要哪些方法)- 我只使用其中一些,而不是全部,因为我并不关心像ChangePasswordQuestionAndAnswer
,DeleteUser
等方法。
只需确保在您的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>
你有一个来自Chris Pels的不错的视频教程(日期为2007年,但仍然大部分有效),以及相关代码。虽然视频教程是VB语言的,但可以让你理解步骤...
http://www.asp.net/general/videos/how-do-i-create-a-custom-membership-provider
我不仅创建了自己的会员提供程序,而且还创建了角色提供程序。正如您从上面的代码中看到的那样,它与MemberShip一样简单,让您在应用程序中使用以下内容:
[Authorize(Roles = "Partner, Admin")]
public ActionResult MyAction()
{
}
并且
@if (Roles.IsUserInRole(Context.User.Identity.Name, "Admin"))
{
<div>You're an ADMIN, Congrats!</div>
}
什么是自动创建所需的方法(继承类中使用句点+空格)
您可以右键单击,或将光标放在名称上并按下Control + .,然后按space。