我有一个C#Web应用程序,需要接受用户名或电子邮件地址才能登录。目前使用电子邮件地址登录时工作正常,这也恰好与完全限定的域名相同,如果为变量输入了正确的电子邮件地址和密码,Membership.ValidateUser
将返回true isValid
用户和密码。
bool isValid = Membership.ValidateUser(user, password);
但是,如果仅使用用户的用户名部分而不是完全限定的用户名(电子邮件地址),则isValid将返回false。
例如,我的用户可能是johngordon和我的电子邮件johngordon @ fullyqualifieddomain。我的密码是12345.使用
Membership.ValidateUser("johngordon", "12345")
返回false
Membership.ValidateUser("domain\\johngordon", "12345")
返回false
Membership.ValidateUser("fullyqualifieddomain\\johngordon", "12345")
返回false
Membership.ValidateUser("johngordon@fullyqualifieddomain", "12345")
返回true
以下是我认为来自web.config的相关信息。我已经做了一些搜索ValidateUser(),但无法找到你如何告诉它使用用户名,电子邮件地址,或在我的场景中。
<membership defaultProvider="MyADMembershipProvider">
<providers>
<add name="MyADMembershipProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider,
System.Web, Version=2.0.0.0,

 
 Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="ADConnectionString" enableSearchMethods="true"
connectionProtection="Secure" connectionUsername="domain\user"
connectionPassword="password" />
</providers>
</membership>
答案 0 :(得分:1)
所以我最终做了不同的事情,这取决于我作为用户名检查完全限定名称,电子邮件地址或只是用户名并相应验证它们的内容。
bool isValid = false;
if(user.Contains("@fullyqualifieddomain"))
{
isValid = Membership.ValidateUser(user, password)
}
else if(user.Contains("@"))
{
isValid = Membership.ValidateUser(Membership.GetUserNameByEmail(user),password);
}
else
{
isValid = Membership.ValidateUser(user+"fullyqualifieddomain");
}