У меня есть веб-приложение С#, в котором есть необходимость принять либо имя пользователя, либо адрес электронной почты для входа. В настоящее время он работает очень хорошо, чтобы войти с использованием адреса электронной почты, который также совпадает с полным доменным именем, где Membership.ValidateUser
возвращает true в isValid
если для пользователя и пароля переменных введен правильный адрес электронной почты и пароль.
bool isValid = Membership.ValidateUser(user, password);
Однако isValid возвращает false, если для пользователя используется только часть имени пользователя, а не полное имя пользователя (адрес электронной почты).
Например, мой пользователь может быть johngordon и мой адрес электронной почты johngordon @fullqualifieddomain. Мой пароль: 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>
Таким образом, я в конечном итоге делал разные вещи в зависимости от того, что я получил как имя пользователя, проверяющего полнофункциональное имя, адрес электронной почты или просто имя пользователя и, соответственно, их проверку.
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");
}
domain\username