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

1.      使用Profile.GetProfile(string username)时碰上的问题

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

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

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

2.      使用MembershipUser.ChangePassword碰上的问题

我自定义了一个添加,修改,删除Membership用户的控件,要使用到修改密码的功能,MembershipUser里有一个ChangePassword的方法,不过需要两个参数,oldpasswordnewpassword,由于我需要一个修改密码而不用提供旧密码的功能,所以就要先把用户的老密码给找出来,幸运的发现在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,那密码是不可逆的,也不能得到密码,而ClearEncrypted都是可以的,Clear是明文保存,而Encrypted是加密保存,如果设置成了加密保存,还需要设置一些密钥什么的,不然CreateUser时会出错,最后是属性requiresQuestionAndAnswer,它是表示是否需要有密码问题和答案来重新取回密码的机制,如果这个设置为true,那么你在使用GetPassword时,需要把这个用户的问题的答案一起传进去,不然也会产生异常。

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

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

    <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"

路漫漫其修远兮 吾将上下而求索

posted @ 2007-03-15 16:12 .Live 阅读(1017) 评论(4)  编辑 收藏 网摘

  回复  引用  查看    
#1楼 2007-04-06 16:34 | Hunts.C      
Mark:)
  回复  引用  查看    
#2楼 2008-02-01 16:53 | 一抹微蓝      
我在BasePage(继承自己System.Web.UI.Page)里使用HttpContext.Current.Profile.(web.config文件中profile节中配置的强类型字段)在调试的时候正常,但我在用web deployment编译后再访问页面就会出现“ System.ArgumentNullException: 值不能为空。Parameter name: type”这样的错误,花了一上午的时间也没有找到问题出在哪。
  回复  引用  查看    
#3楼 [楼主]2008-02-01 22:03 | .Live      
@一抹微蓝
那你用vs普通的发布功能发布网站 是不是正常?

  回复  引用  查看    
#4楼 2008-02-21 15:58 | 一抹微蓝      
调试的时候正常!
使用VS普通的发布网站方式发生错误,发布不了网站

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-03-15 16:15 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: