Membership.ValidateUser方法的工作原理开发服务器上(IIS Express和卡西尼)。 但在我的IIS(它作为我的开发机器上的应用程序发布),它总是返回false。
即使用户是否被批准,没有锁定,用户名和密码是否正确。 没有一丝错误。 ?
http请求1:davutg-PC:6423 / BpmService /登录用户名= ABC&口令= 0035?
结果1:<布尔> 真 </布尔>
http请求2:davutg-PC / BPM / BpmService /登录用户名= 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(user和pass)
任何建议将不胜感激!
解决了! 希望这将节省别人的时间。
问题是应用程序的名称。
主机:端口/服务
主机/ BPM /服务
注:BPM是你给它在IIS上的一个应用的名字。
会员加密算法使用“ApplicatonName”。 当我安装应用程序我用BPM的应用程序名称。 开发服务器上的“姓名”返回“/”。 但在IIS的“BPM”!
我所有的旧密码用“/” appliacion名称生成。 所以,总是提供应用程序名称。 阅读这篇文章从斯科特谷的博客。
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>
我也面临这个问题,我无法修复了两个星期。
专注于创建使用成员的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()
函数被调用。 它应该是这样的。