MVC Логин сравнения паролей с учетом регистра - PullRequest
0 голосов
/ 04 мая 2018

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

var UserDetail = db.UserTbls.Where(x => x.UserName == UserModel.UserName &&
                                        x.Password == UserModel.Password).FirstOrDefault();

if (UserDetail == null)
{
    UserModel.loginErrorMessage = "Wrong Username or Password";
    return View("Login", UserModel);
}
else 
{
    Session["UserId"] = UserDetail.UserId;
    return RedirectToAction("Index", "Home");
}

Ответы [ 3 ]

0 голосов
/ 04 мая 2018

Если вы хотите сравнить имена пользователей без учета регистра, это опция:

x.UserName.Equals(UserModel.UserName, StringComparison.OrdinalIgnoreCase)

Если вы хотите сравнить имена пользователей с учетом регистра, это опция:

x.UserName.Equals(UserModel.UserName, StringComparison.Ordinal)

Обновление:

Для всех, кто придет на этот пост и увидит мой ответ, я бы хотел указать ответ Стива Пай , за который я проголосовал. И здесь - хорошее объяснение.

(я подумал, что я мог бы также оставить свой ответ здесь на тот случай, если людям все еще полезно увидеть разные подходы к сравнению строк)

0 голосов
/ 05 мая 2018

EF to SQL Server будет выполнять сравнение строк без учета регистра. Чтобы выполнить проверку с учетом регистра, как вы описали:

var users = var UserDetail = db.UserTbls.Where(x => x.UserName == UserModel.UserName).ToList();
var matchingUser = users.SingleOrDefault(x => x.Password == password);

.ToList () будет означать, что следующее выражение будет оцениваться по отношению к объектам, возвращая все пользовательские записи с этим именем. Если имена пользователей уникальны, то это должен быть SingleOrDefault (). Оттуда операция == над паролем будет чувствительна к регистру по умолчанию.

Однако, как упомянул Стивен, пароли должны всегда хешироваться с солью и храниться там, где сравниваются хеши, а не текстовые пароли.

Рекомендую прочитать о хэшах SHA-1.

0 голосов
/ 04 мая 2018

string.Compare метод имеет и перегрузку, которую можно использовать для сравнения имени пользователя и паролей.

Как уже упоминал Стивен, вам, безусловно, нужно работать над внедрением надлежащих мер безопасности.

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