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: <布尔></布尔>

这是我的设置

<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(user,pass)

任何建议将不胜感激!

4

2 回答 2

9

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

问题是应用程序名称。

主机:端口/服务

主机/ BPM /服务

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

成员加密算法使用“ApplicatonName”。当我设置应用程序时,我使用 BPM 作为应用程序名称。在开发服务器上,“名称”返回“/”。但它在 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>
于 2013-02-12T09:30:09.863 回答
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()函数是如何被调用的。应该是这样的。

于 2019-02-15T02:13:20.843 回答