Membership.ValidateUser在IIS上总是返回false

7

Membership.ValidateUser方法在开发服务器(iis express和cassini)上均有效。

但是在我的IIS上(作为开发机器上的应用程序发布),它总是返回false,即使用户已经批准,未被锁定,并且用户名和密码正确,也没有任何错误迹象。

HTTP请求1:davutg-pc:6423/BpmService/Login?userName=abc&password=0035

结果1:<boolean>true</boolean>

HTTP请求2:davutg-pc/BPM/BpmService/Login?userName=abc&password=0035

结果2:<boolean>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"/>

我比较了Framework 64和Framework下的machine.config文件,它们是一样的。

在开发服务器上可以运行,但在IIS上总是返回false。我可以使用IIS查询不同的服务,没有这样的问题。

此外: 当我输入错误的密码时,“FailedPasswordAttemptCount”会增加到开发服务器中。 但是在IIS中不会改变。IIS出了什么问题。我只是调用Membership.ValidateUser(user,pass)

任何建议将不胜感激!

2个回答

9

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

问题出在应用程序名称上。

主机:端口/服务

主机/BPM/服务

注意:BPM是你在IIS上给它起的应用程序名称。

成员身份验证算法使用“ApplicationName”。当我设置应用时,我使用BPM作为应用程序名称。在开发服务器上,“name”返回“/”。但在IIS上是“BPM”!

我的所有旧密码都是使用“/”应用程序名称生成的。因此,请始终提供应用程序名称。请阅读Scott-Gu的博客文章(链接)

    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>

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() 函数的调用方式。应该是这样的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接