По комментариям
Если userstatus
равно 0
, вы можете использовать учетную запись, и если
userstatus = 1
вы не можете получить доступ к учетной записи, потому что кто-то уже
использовал это
мы должны проверить на 3
случаи:
- пользователь / пароль не найден (давайте вернем
-1
как userstatus
для этого)
- пользователь владеет учетной записью (
userstatus
is 0
)
- учетная запись принадлежит другому пользователю (
userstatus
is 1
)
Давайте метод извлечения :
// -1 Account does't exist
// 0 Account exists and belongs to the user
// 1 Account exists and belongs to different user
public int UserLogStatus(string login, string password) {
//DONE: do not reuse connection, but create a new one
using (var con = new MySqlConnection(ConnectionStringHere)) {
con.Open();
//DONE: keep sql readable
//DONE: make sql parametrized
string sql =
@"select userstatus
from png_users
where username = @prm_username and
password = @prm_password";
//DONE: wrap IDisposable into using
using (MySqlCommand query = new MySqlCommand(sql, con)) {
//TODO: better create params explicitly, Parameters.Add(name, type).Value = ...
query.Parameters.AddWithValue("@prm_username", login);
query.Parameters.AddWithValue("@prm_password", pasword);
using (var reader = query.ExecuteReader()) {
if (reader.Read())
return Convert.ToInt32(reader[0]);
else
return -1;
}
}
}
}
И тогда вы можете использовать его:
int status = IsUserLogged(txtboxUsername.Text, txtboxPassword.Text);
if (status == 0) {
MessageBox.Show("Either username or password is incorrect.",
"THD FAM",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
return;
}
else if (status == 1) {
MessageBox.Show("This account is currently online, you forgot to logout. Please approach administrator for help. Thank you",
"THD FAM",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
return;
}
Внимание! Не хранить пароли как обычный текст . Если кто-то украдет стол, все пользователи будут скомпрометированы. Вместо этого сохраните хэши паролей . При входе в систему пользователь должен указать строку (password
), такую, что
HashFunction(password) == StoredHash
, где HashFunction
- это односторонняя функция : легко вычислить (т. Е. Легко найти HashFunction(password)
значение), трудно повернуть (т. Е. Почти невозможно найти жало такое, что HashFunction(password) == given value
)