您的位置:首页 > 其它

使用MemberShip,Profile时碰上的一些问题

2007-03-15 16:12 543 查看
1. [/b]使用[/b]Profile.GetProfile(string username)[/b]时碰上的问题[/b][/b]

我想在一个页面里编辑任意一个MemberShip的User的Profile,这时我使用了页面.Profile.GetProfile(username),由于能登陆到这个页面的用户都是具有权限的用户,所以运行的时候一切正常,为了优化代码,我要把操作Profile的代码移动到后台自己定义的类里,这时候已经不存在页面类的实例,所以我要使用HttpContext.Current.Profile来代替Page.Profile 这时候问题出现了,在HttpContext.Current.Profile里不存在GetProfile(string username)这个方法,仔细看一下 原来这两个Profile是来之不同的类,Page.Profile是ProfileComm的实例,而HttpContext.Current.Profile是Profilebase的实例,最后找到得到GetProfile的方法是这样的:

ProfileCommon pc = (ProfileCommon)ProfileBase.Create(“username”, true);

而这里的username,一定是要一个通过认证的membership的user,这时候在使用pc.GetProfile(“otherusername”) 就可以对其他用户的Profile进行编辑了。

2. [/b]使用[/b]MembershipUser.ChangePassword[/b]碰上的问题[/b][/b]

我自定义了一个添加,修改,删除Membership用户的控件,要使用到修改密码的功能,MembershipUser里有一个ChangePassword的方法,不过需要两个参数,oldpassword和newpassword,由于我需要一个修改密码而不用提供旧密码的功能,所以就要先把用户的老密码给找出来,幸运的发现在MembershipUser下有一个GetPassword的方法,立即调用弹出异常,看了异常的说明继续找问题,发现问题出在 Membership Provider的配置参数上,

<membership defaultProvider="herSqlMembershipProvider">

<providers>

<add name="herSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" requiresQuestionAndAnswer="false" connectionStringName="her" requiresUniqueEmail="false" passwordFormat="Clear" minRequiredPasswordLength="3" enablePasswordRetrieval="true"

minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" applicationName="/ " />

</providers>

</membership>

GetPassword主要涉及到三个属性: passwordFormat, requiresQuestionAndAnswer, enablePasswordRetrieval,首先需要把enablePasswordRetrieval设置为true,可以回收密码,然后是passwordFormat可以设置三个值:Clear, Encrypted, and Hashed,如果设置成了Hashed,那密码是不可逆的,也不能得到密码,而Clear和Encrypted都是可以的,Clear是明文保存,而Encrypted是加密保存,如果设置成了加密保存,还需要设置一些密钥什么的,不然CreateUser时会出错,最后是属性requiresQuestionAndAnswer,它是表示是否需要有密码问题和答案来重新取回密码的机制,如果这个设置为true,那么你在使用GetPassword时,需要把这个用户的问题的答案一起传进去,不然也会产生异常。

3. [/b]匿名访问时设置[/b]Profile[/b]属性出现异常[/b][/b]

这也是需要配置文件里的属性进行配置:

<anonymousIdentification enabled="true" />

<profile defaultProvider="herSqlProfile">

<providers>

<add name="herSqlProfile" type="System.Web.Profile.SqlProfileProvider" connectionStringName="her" />

</providers>

<properties>

<add name="MyTheme" type="String" allowAnonymous="true"/>

</properties>

</profile>

首先是anonymousIdentification 把enbaled设置为true,然后再profile里的属性allowAnonymous="true"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: