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(用户,传递)
任何建议将不胜感激!
答案 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()
函数。应该是这样的。