这里有一些关于这个问题的线索,但是大多数都已过时,其中的参考链接更加过时。
我得到了这个网站,我需要使用它自己的表结构连接到外部sql server(mssql),使用默认的asp.net成员资格提供程序结构不是一个选项。表格布局非常简单,并且使用方式看起来像这样(它叫做个人)
Individuals
- UserGuid (uniqueidentifier/guid, unique)
- Name (varchar)
- Password (varchar)
- HasAccess (tinyint/ 1 or 0)
- DateTime (datetime)
- Log (xml)
所需的功能只是记录某人,其余的没有必要:)
我遵循了一些指南,但其中大多数已经过时且非常复杂。不幸的是,msdn示例遵循这种模式,文档不是很好。
因此,如果有人获得了一些资源,显示如何或愿意发布代码示例或类似内容,我会很感激。
谢谢!
答案 0 :(得分:62)
真的很简单:
创建一个新的类文件(如果你没有在项目的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
,{{1}等方法等等
只需确保在DeleteUser
中添加新的成员资格为:
web.config
你有一个很好的视频教程来自Chris Pels(2007年,但仍然大部分有效)和代码,尽管视频教程是在VB中,但让你理解这些步骤......
http://www.asp.net/general/videos/how-do-i-create-a-custom-membership-provider
我不仅创建了自己的会员提供商,而且我创建了我的角色提供商,从上面的代码中可以看出,就像在会员单上一样简单,让你在你的应用程序中使用类似的东西:
<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>
和
[Authorize(Roles = "Partner, Admin")]
public ActionResult MyAction()
{
}
您可以右键单击,或将光标放在名称上,然后按 Control + 。,然后按 space 。
答案 1 :(得分:0)
这里有几个主题 关于这个问题,但大多数都是 过时的和参考链接 它们甚至更加过时了。
自从在Framework 1.0中引入ASP.NET以来,Page.User / CurrentSession.User / IPrincipal / IIdentity模型保持不变。在Framework 2.0中,添加了成员资格提供程序。那些“过时的”参考仍然是有效的指导。 MSDN