Как сравнить строку с учетом регистра в EF? - PullRequest
2 голосов
/ 14 июня 2011

членство в организации ValidateUser с использованием EF довольно просто

public override bool ValidateUser(string username, string password)
{
    // Validate User Credentials
    var r = db.ST_Users.FirstOrDefault(
                           x => x.Username.Equals(username) && 
                                x.Password.Equals(password));
    return r != null ? true : false;
}

Но это возвращает true (находит и извлекает объект отверстия) независимо от того, использую ли я balexandre или BAleXanDre.

Как включить сравнение EF в режиме с учетом регистра?

Я знаю, как сравнивать в случае нечувствительности к регистру (используя перегрузку StringComparison.CurrentCultureIgnoreCase, но я просто хочу наоборот)

Ответы [ 3 ]

8 голосов
/ 14 июня 2011

Вы не должны запрашивать пароль. Вы должны извлечь объект User и выполнить сравнение паролей локально, потому что SQL-сервер будет выполнять сравнение без учета регистра по умолчанию (если вы не измените настройки базы данных, что не следует воспринимать легкомысленно).

var r = db.ST_Users.SingleOrDefault(x => x.Username == username);

return r != null && r.Password == password;

Кроме того, вы, похоже, храните простые пароли в своей базе данных. В зависимости от типа приложения это может быть не очень хорошей идеей. Попробуйте смешать их с солью. Здесь вы найдете много полезной информации о Stackoverflow. Например, посмотрите на этот вопрос и на этом сайте .

0 голосов
/ 26 ноября 2017

Я столкнулся с той же проблемой. Я попробовал:

1. from p in entity.SecurityUsers where p.userName.Equals(userName) && p.password.Equals(password) select p
2. from p in entity.SecurityUsers where p.userName == userName && p.password == password select p

Но оба они не сработали. Тогда я выбрал USER только ..,

var user = (from p in entity.SecurityUsers where p.userName == userName select p).first();

А затем сравните его пароль:

return p != null && p.Password == password;
0 голосов
/ 14 июня 2011

Вы пробовали

x => x.Username == username && x.Password == password

вместо использования Equals()?

Возможно этот пост может помочь вам в дальнейшем

...