Membership.ValidateUser始终在IIS上返回false

时间:2013-02-12 08:15:00

标签: iis web-config asp.net-membership cassini

Membership.ValidateUser方法适用于开发服务器(iis express和cassini)。 但是在我的IIS上(它作为我的开发机器上的应用程序发布)它总是返回 false

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

http请求1: davutg-pc: 6423 / BpmService /登录?userName = abc& password = 0035

结果1:            <布尔值> true < / boolean>

http请求2: davutg-pc / BPM / BpmService /登录?userName = abc& password = 0035

结果2:<布尔值> false < / boolean>

以下是我的设置

<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与Framework 64和Framework相同。

它适用于开发服务器,但在IIS上始终返回false。我可以用IIS 查询不同的服务而没有这样的问题。

另外: 当我为开发服务器输入错误密码“FailedPasswordAttemptCount”增加时。 但它不会改变IIS 。 IIS出了什么问题。我只是调用Membership.ValidateUser(用户,传递)

任何建议将不胜感激!

2 个答案:

答案 0 :(得分:8)

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

问题是应用程序名称。

主机:端口/服务

主机/的 BPM /服务

注意:BPM是您在IIS上提供的应用程序名称。

成员资格加密算法使用“ApplicatonName”。当我设置应用程序时,我使用BPM作为应用程序名称。在开发服务器上,“name”返回“/”。但它在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>

答案 1 :(得分:0)

我也遇到了这个问题,两周无法修复。

着重使用CreateUser()创建成员:

MembershipCreateStatus createStatus;
MembershipUser member = 
Membership.CreateUser(TextBox_username.Text.Replace("'", "''"), 
           TextBox_password.Text.Replace("'", "''"), 
           TextBox_email.Text.Replace("'", "''"), null, null, true, out createStatus);

检查如何调用CreateUser()函数。应该是这样的。