Eri*_*itz 40 asp.net asp.net-membership membership-provider
这里有一些关于这个问题的线索,但是大多数都已经过时了,其中的参考链接更加过时了.
我有这个网站,我需要连接到一个外部的SQL服务器(mssql)与它自己的表结构,使用默认的asp.net成员资格提供程序结构不是一个选项.表格布局非常简单,使用方式看起来像这样(它叫做个人)
Individuals
- UserGuid (uniqueidentifier/guid, unique)
- Name (varchar)
- Password (varchar)
- HasAccess (tinyint/ 1 or 0)
- DateTime (datetime)
- Log (xml)
Run Code Online (Sandbox Code Playgroud)
所需的功能只是记录某人,其余的没有必要:)
我遵循了一些指南,但其中大多数已经过时且非常复杂.不幸的是,msdn示例遵循这种模式,文档不是很好.
因此,如果有人得到一些资源显示如何或愿意发布代码示例或类似的东西,我会很感激.
谢谢!
bal*_*dre 62
它非常简单:
创建一个新的类文件(如果你没有使用多层系统,在你的项目的Models文件夹中)让我们调用 MyMembershipProvider.cs
继承该类 System.Web.Security.MembershipProvider
自动创建所需的方法(继承类中的句点+空格)
完成!
所有方法都有NotImplementedException
例外,您需要做的就是编辑每个方法并放置自己的代码.例如,我定义GetUser
如下所示:
public override MembershipUser GetUser(string username, bool userIsOnline)
{
return db.GetUser(username);
}
Run Code Online (Sandbox Code Playgroud)
db
是我作为数据库添加到我的数据库存储库
MyServicesRepository db = new MyServicesRepository();
Run Code Online (Sandbox Code Playgroud)
在那里,你会发现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);
}
Run Code Online (Sandbox Code Playgroud)
这样做对所有使用方法(调试项目,看看你需要哪些) -我只用了一些,不是所有的,因为我真的不关心类似的方法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>
Run Code Online (Sandbox Code Playgroud)
你有一个很好的视频教程来自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()
{
}
Run Code Online (Sandbox Code Playgroud)
和
@if (Roles.IsUserInRole(Context.User.Identity.Name, "Admin"))
{
<div>You're an ADMIN, Congrats!</div>
}
Run Code Online (Sandbox Code Playgroud)
您可以右键单击,或将光标放在名称上,然后按Control+ .然后按space.
归档时间: |
|
查看次数: |
33112 次 |
最近记录: |