2013-02-12 83 views
7

Membership.ValidateUser方法可以在开发服务器上运行(iis express和cassini)。 但在我的IIS(它作为我的开发计算机上的应用程序发布)时,它始终返回falseMembership.ValidateUser总是在IIS上返回false

即使用户已被批准,未锁定且用户名和密码正确。没有跟踪错误。 ?

http请求1: davutg-PC:/BpmService /登录用户名= ABC &口令= 0035

结果1: <布尔> < /布尔>

http请求2: davutg-pc/BPM/BpmService/Login?userName = abc &口令= 0035

结果2: <布尔> < /布尔>

这里是我的设置

<roleManager enabled="true" defaultProvider="MySQLRoleProvider"/> 

<machineKey validationKey="E8B40EEA5A8EFC6F...key" decryptionKey="385..." validation="SHA1" /> 

<membership defaultProvider="MySQLMembershipProvider" hashAlgorithmType="SHA1"> 
    <providers> 
    <remove name="MySQLMembershipProvider" /> 
    <add type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web, Version=6.5.5.0, Culture=neutral, 
     PublicKeyToken=c5687fc88969c44d" 
     name="MySQLMembershipProvider" 
     connectionStringName="LocalMySqlServer" 
     minRequiredPasswordLength="3" 
     minRequiredNonalphanumericCharacters="0" 
     requiresUniqueEmail="false" 
     requiresQuestionAndAnswer="false" 
     passwordFormat="Encrypted"/> 

我比较machine.configs是相同的框架64和框架。

它在开发服务器上工作,但在IIS上总是返回false。我可以用查询不同的服务与IIS并没有这样的问题。

另外: 当我输入错误的密码“FailedPasswordAttemptCount” 为开发服务器增加。 但它不会为IIS更改。什么是错误的IIS。我只是打电话Membership.ValidateUser(用户,通过)

任何建议将不胜感激!

回答

7

解决!希望这会节省一些人的时间。

问题在于应用程序名称。

主机:端口/服务

主机/ BPM /服务

注:BPM是你给它在IIS上的一个应用的名字。

成员资格加密算法使用“ApplicatonName”。当我安装应用程序时,我使用BPM作为应用程序名称。在开发服务器上的“名称”返回“/”。但它在IIS上的“BPM”!

我所有的旧密码都是用“/”appliacion名称生成的。所以总是提供一个应用程序名称阅读Scott-Gu的博客article

public bool Login(string userName,string password) 
    { 
     var provider = Membership.Provider; 
     string name = provider.ApplicationName; 

     return Membership.ValidateUser(userName, password); 
    } 

//错误的

 <membership> 
     <providers> 
      <clear/> 
      <add name="AspNetSqlMembershipProvider" 
       type="System...bla bla" 
       connectionStringName="LocalSqlServer" 
       enablePasswordRetrieval="false" 
       enablePasswordReset="true" 
       requiresQuestionAndAnswer="true" 
       requiresUniqueEmail="false" 
       passwordFormat="Hashed" 
       maxInvalidPasswordAttempts="5" 
       minRequiredPasswordLength="7" 
       minRequiredNonalphanumericCharacters="1" 
       passwordAttemptWindow="10" 
       passwordStrengthRegularExpression="" 
       applicationName="/" //Wrong 
      /> 
     </providers> 
    </membership> 

//对一个

  <membership> 
       <providers> 
       <clear/> 
      <add name="AspNetSqlMembershipProvider" 
       type="System.Web.Security.S.. bla bla" 
       connectionStringName="LocalSqlServer" 
       enablePasswordRetrieval="false" 
       enablePasswordReset="true" 
       requiresQuestionAndAnswer="true" 
       requiresUniqueEmail="false" 
       passwordFormat="Hashed" 
       maxInvalidPasswordAttempts="5" 
       minRequiredPasswordLength="7" 
       minRequiredNonalphanumericCharacters="1" 
       passwordAttemptWindow="10" 
       passwordStrengthRegularExpression="" 
       applicationName="MyAPPNAME" //Well :) 
      /> 
     </providers> 
    </membership>