[英]Return actual string value from LINQ SQLite query C#
我目前正在Xamarin.ios上使用C#使用SQLite创建登录系统。 我的问题是,将散列密码发送到数据库可以正常工作。 在登录方面,我需要取回实际的哈希值,以便可以运行一种方法来对照用户输入的值检查返回的值。
我遇到的问题是查询实际上并没有返回所有值,而且我实际上不理解从查询中得到的结果。 我运行FirstOrDefault以确保仅在用户迷恋电子邮件后才能得到电子邮件和密码。 但是,由于我没有返回字符串值,因此我不确定如何将其放入检查哈希值的方法中。
希望这是有道理的。 这是运行查询的代码:
public void UserLogin()
{
string dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "PmApp.db3");
var connection = new SQLiteConnection(dbPath);
string loginEmail = loginEmailInput.Text;
string loginPass = loginPasswordInput.Text;
var emailExists = (from s in connection.Table<SQLiteTables.LoginInfo>()
where s.Email.Equals(loginEmail)
where s.Password.Equals(loginPass)
select s).FirstOrDefault();
Console.WriteLine(emailExists); //This is just to see what value gets returned
}
这是返回的值:
2018-05-16 15:57:50.401 SQLite[15735:8043670] SQLite.SQLiteTables+LoginInfo
希望有人可以提供帮助。 杰米
如果只需要返回一列,请尝试以下操作:
var emailExists = (from s in connection.Table<SQLiteTables.LoginInfo>()
where s.Email.Equals(loginEmail)
where s.Password.Equals(loginPass)
select s.Email).FirstOrDefault();
var loginInfo = (from s in connection.Table<SQLiteTables.LoginInfo>()
where s.Email.Equals(loginEmail)
select s).FirstOrDefault();
if (loginInfo != null) {
var dbPass = loginInfo.Password;
if (hash(dbPass) == hash(loginPass) {
// hashed passwords match
}
}
你也可以先做哈希
var hashedPass = hash(loginPass);
var loginInfo = (from s in connection.Table<SQLiteTables.LoginInfo>()
where s.Email.Equals(loginEmail)
where s.Password.Equals(hashedPass)
select s).FirstOrDefault();
if (loginInfo != null) {
// hashed passwords match
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.