其实很简单:
创建一个新的 Class 文件(如果您不使用多层系统,请在项目的 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 Provider,而且 我还创建了 Roles 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。