Итак, в моей базе данных mysql есть целая таблица для пользователей, которая содержит хешированные (с функцией PASSWORD()
mysql) пароли. В C# я создал программу, которая может вставлять новые записи в базу данных и отображать существующие.
Теперь я нахожусь на этапе, когда я хочу выполнить вход в систему, который проверяет, введены ли данные ( имя пользователя и пароль) равны тем, которые есть в таблице пользователей. (Таблица users содержит столбцы id, username, password.)
То, что я пробовал до сих пор:
В моем классе для операций с базами данных: (c.conn
, c.open()
, c.close()
- это просто функции, определенные мной в классе Connect.)
public bool logIn(string usrName, string pswd)
{
bool success = false;
string dbusrname; string dbpswd;
c.open();
string hashedEnteredPswd = "PASSWORD(@password);";
cmd = new MySqlCommand(hashedEnteredPswd, c.conn);
cmd.Parameters.AddWithValue("@password", pswd);
cmd.ExecuteNonQuery();
c.close();
query = "SELECT * FROM admins;";
c.open();
cmd = new MySqlCommand(query, c.conn);
var reader=cmd.ExecuteReader();
while (reader.Read())
{
dbusrname = reader["users"].ToString();
dbpswd = reader["password"].ToString();
if (dbusrname == usrName && dbpswd == hashedEnteredPswd)
{
success = true;
}
else
{
success = false;
}
}
c.close();
return success;
}
В коде моей формы:
private void Container_Load(object sender, EventArgs e)
{
c.open();
clearPanels();
panelLogIn.Visible = true;
}
private void buttonLogIn_Click(object sender, EventArgs e)
{
if (dbops.logIn(textBoxUID.Text, textBoxPSWD.Text))
{
clearPanels();
panelMain.Visible = true;
}
}
В своем страдании я попытался хэшировать введенное пароль с функцией mysql в C# (я знаю, я знаю ...)
* c когда я запускаю это, я получаю следующее исключение: MySql.Data.MySqlClient.MySqlException: 'PROCEDURE test.PASSWORD does not exist'
, что ожидается и Я понимаю, почему это не работает.
Но тогда, как это сделать правильно? Как же я могу заставить это работать?