繁体   English   中英

从LINQ SQLite查询C#返回实际的字符串值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM