Возврат фактического значения строки из запроса LINQ SQLite C # - PullRequest
0 голосов
/ 16 мая 2018

Я сейчас создаю систему входа в систему, используя SQLite, используя C # на Xamarin.ios.У меня проблема в том, что отправить в базу данных хешированный пароль, который работает нормально.На стороне входа в систему мне нужно получить обратно фактически хешированное значение, чтобы я мог запустить метод, который проверяет возвращаемое значение по введенному пользователем значению.

Проблема, с которой я столкнулся, заключается в том, что запрос на самом деле не возвращает значение как все, и я на самом деле не понимаю, что я получаю от запроса.Я запускаю 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

Надеюсь, кто-нибудь может помочь.Джейми

Ответы [ 2 ]

0 голосов
/ 16 мая 2018
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
}
0 голосов
/ 16 мая 2018

Если вам нужно вернуть только один столбец, попробуйте это:

var emailExists = (from s in connection.Table<SQLiteTables.LoginInfo>()
                       where s.Email.Equals(loginEmail)
                       where s.Password.Equals(loginPass)
                       select s.Email).FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...