Sql表:
ID User Pass
1 John 09o0s
2 Jim bd09d
C#:
string u = the user name provided by someone;
string p = the password provided by someone;
List<DataRow> list = dt.AsEnumerable().ToList();
bool trueor = list.Any(user => user.Equals(strU));
如何使用Linq查看提供的用户名是否有条目,如果有,则提供的密码是否与用户名匹配。
答案 0 :(得分:3)
您可以使用&&
运算符来比较用户名和密码:
bool isValidUser = list.Any(x => x.User == u && x.Pass == p);
顺便提一下,当前的设计看起来就像是在数据库中以明文形式存储用户密码。这是你不应该做的事情,而是你应该只存储哈希和盐。所以正确的算法就是:
string u = the user name provided by someone;
string p = the password provided by someone;
// I have no idea what this dt variable is, but I assume for this example
// that it is an entity framework context that returns a users table with the
// following columns: ID, User, PasswordSalt and PasswordHash
List<DataRow> list = dt.AsEnumerable().ToList();
bool isValidUser = false;
var user = list.SingleOrDefault(x => x.User == u); // the username must be unique
if (user != null)
{
string actualHash = CalculateHash(p, user.PasswordSalt);
isValidUser = actualHash == u.PasswordHash;
}
return isValidUser;
因此,您可以在此示例中看到正确的实现是在您的数据库中存储Username,Salt和Password哈希。然后将计算出的哈希值与db中的值进行比较,以验证用户是否输入了正确的凭据。