Удалите чувствительность к регистру из FormsAuthentication.Authenticate имени пользователя / пароля - PullRequest
2 голосов
/ 05 июля 2010

Приведенный ниже код и конфигурация работают нормально, но заставляют вводить имя пользователя / пароль с учетом регистра, я хочу, чтобы он не учитывал регистр.

Код:

protected void LoginButton_Click(object sender, EventArgs e)
        {
            try
            {
                string uid = UserText.Text.Trim();
                string pwd= PwdText.Text.Trim();

                if (string.IsNullOrEmpty(uid) ||
                    string.IsNullOrEmpty(pwd))
                {
                    throw new ApplicationException("UserName or Password should not be blank.");
                }

                bool isAuthrnticated = FormsAuthentication.Authenticate(uid, pwd);

                if (isAuthrnticated)
                {
                    FormsAuthentication.SetAuthCookie("Admin", false);

                    //...
                }
                else
                {
                    ((Site)this.Master).ShowError("Invalid UserName/Password.", ErrorSeverity.Warning);
                }
            }
            catch (Exception ex)
            {
                ErrorLogger.LogError(ex);
                ((Site)this.Master).ShowError(ex.Message, ErrorSeverity.Warning);
            }
        }

Web.Config

<authentication mode="Forms">
  <forms defaultUrl="~/Default.aspx" loginUrl="~/Default.aspx" slidingExpiration="true" timeout="1000">
    <credentials passwordFormat="Clear">
      <user name="Admin" password="ZAdmin"/>
    </credentials>
  </forms>
</authentication>

Ответы [ 3 ]

4 голосов
/ 05 июля 2010

По умолчанию имена пользователей не чувствительны к регистру, а пароли. Самый простой способ сделать это, когда они регистрируются, изменить как un, так и pw на ToUpper () или ToLower (), а затем, когда вы аутентифицируетесь, сделать то же самое с тем, что они вводят.

string uid = UserText.Text.Trim().ToUpper();
string pwd= PwdText.Text.Trim().ToUpper();
1 голос
/ 05 июля 2010

Когда вы сохраняете имя пользователя и пароль, вместо того, чтобы хранить их как есть, сначала вызовите ToUpper () для них.Затем сделайте то же самое со строками, которые вы передаете FormsAuthentication.Authenticate ().Таким образом, оба будут преобразованы во все прописные версии перед сравнением, что делает регистр неактуальным.

0 голосов
/ 05 июля 2010

Установите параметры сортировки вашей базы данных, чтобы вам не приходилось отслеживать чувствительность к регистру http://web.archive.org/web/20080811231016/http://sqlserver2000.databases.aspfaq.com:80/how-can-i-make-my-sql-queries-case-sensitive.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...