2013-02-12 94 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>