分享
 
 
 

Community Server专题八:MemberRole之Membership深入篇

王朝other·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

专题八的上篇大致讨论了MemberRole中的Membership实现,对于运用Membership进行web开发足够,但是对于想更深入了解Membership实现机理的朋友那是远远不够的,这个专题我们更深入一下了解Membership。

其实MemberRole是一个非常好的资源包,借住Reflector这个优秀的工具,你可以对其进行代码分析。它无论是在组建的构架、代码的设计、数据库表的建立、存储过程的使用等都是非常优秀的,你是程序员也好构架师也罢,其中可以学习的真的很多很多,我在整个分析的过程中也深深受益。

由于MemberRole中的Membership只实现了对SQL Server的操Provider类,即SqlMembershipProvider类。因此我们从SqlMembershipProvider开始分析。Provider模型在上篇已经做过介绍,SqlMembershipProvider类继承了MembershipProvider,并实现其所有的抽象方法。在分析之前先看两个类:MembershipUser与MembershipUserCollection。

MembershipUser,先看看代码:(代码中省略的具体实现,只有方法与属性名称)

public class MembershipUser

{

// Methods

protected MembershipUser();

public MembershipUser(MembershipProvider provider, string name, object providerUserKey, string email, string passwordQuestion, string comment, bool isApproved, bool isLockedOut, DateTime creationDate, DateTime lastLoginDate, DateTime lastActivityDate, DateTime lastPasswordChangedDate, DateTime lastLockoutDate);

public virtual bool ChangePassword(string oldPassword, string newPassword);

public virtual bool ChangePasswordQuestionAndAnswer(string password, string newPasswordQuestion, string newPasswordAnswer);

public virtual string GetPassword();

public virtual string GetPassword(string passwordAnswer);

public virtual string ResetPassword();

public virtual string ResetPassword(string passwordAnswer);

public override string ToString();

public virtual bool UnlockUser();

internal virtual void Update();

private void UpdateSelf();

// Properties

public virtual string Comment { get; set; }

public virtual DateTime CreationDate { get; }

public virtual string Email { get; set; }

public virtual bool IsApproved { get; set; }

public virtual bool IsLockedOut { get; }

public bool IsOnline { get; }

public virtual DateTime LastActivityDate { get; set; }

public virtual DateTime LastLockoutDate { get; }

public virtual DateTime LastLoginDate { get; set; }

public virtual DateTime LastPasswordChangedDate { get; }

public virtual string PasswordQuestion { get; }

public virtual MembershipProvider Provider { get; }

public virtual object ProviderUserKey { get; }

public virtual string UserName { get; }

// Fields

private string _Comment;

private DateTime _CreationDate;

private string _Email;

private bool _IsApproved;

private bool _IsLockedOut;

private DateTime _LastActivityDate;

private DateTime _LastLockoutDate;

private DateTime _LastLoginDate;

private DateTime _LastPasswordChangedDate;

private string _PasswordQuestion;

private MembershipProvider _Provider;

private object _ProviderUserKey;

private string _UserName;

}

这是一个实体类,表示一个由Membership创建的User,该类中有这个User的一些基本状态,如该User的UserName、Email等,还有一些方法,如ChangePassword()、ResetPassword()等(如果你是初学者,还在为建立一个对象需要什么属性,包含什么方法发愁,那这就是你应该好好学的,这也是OOP最基本的要求)。

MembershipUserCollection,这是一个MembershipUser类的容器,用来存放MembershipUser列表,记得上次广州.net俱乐部聚会时,我的演讲中有朋友在提出CS是否使用自定义类来存储用户列表,其实在这里可以看到CS中使用的就是自定义的类而不是DataSet(我想在asp.net 2.0正式发布后这也不会改变),这样做主要是因为考虑到性能与灵活性。

好了,回到SqlMembershipProvider类上来,我们具体分析一个有代表性质的方法:

public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)

{

string text3;

MembershipUser user1;

if (!SecUtility.ValidateParameter(ref password, true, true, false, 0x80))

{

status = MembershipCreateStatus.InvalidPassword;

return null;

}

string text1 = base.GenerateSalt();

string text2 = base.EncodePassword(password, (int) this._PasswordFormat, text1);

if (text2.Length > 0x80)

{

status = MembershipCreateStatus.InvalidPassword;

return null;

}

if (passwordAnswer != null)

{

passwordAnswer = passwordAnswer.Trim();

}

if ((passwordAnswer != null) && (passwordAnswer.Length > 0))

{

if (passwordAnswer.Length > 0x80)

{

status = MembershipCreateStatus.InvalidAnswer;

return null;

}

text3 = base.EncodePassword(passwordAnswer.ToLower(CultureInfo.InvariantCulture), (int) this._PasswordFormat, text1);

}

else

{

text3 = passwordAnswer;

}

if (!SecUtility.ValidateParameter(ref text3, this.RequiresQuestionAndAnswer, this.RequiresQuestionAndAnswer, false, 0x80))

{

status = MembershipCreateStatus.InvalidAnswer;

return null;

}

if (!SecUtility.ValidateParameter(ref username, true, true, true, 0x100))

{

status = MembershipCreateStatus.InvalidUserName

[1] [2] [3] [4] [5] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有