【发布时间】:2021-06-27 23:27:05
【问题描述】:
我正在构建一个具有两种不同用户类型的登录系统。在用户字段中,它们是一个名为 user_isAdmin 的布尔列。如果为 true,则用户为管理员,如果为 false,则用户为默认用户。目前我已经编写了一个登录但当前为每个用户返回 true 的代码。这是第一次尝试:
private void confirmBtn_Click(object sender, EventArgs e)
{
Connect database = new Connect();
String username = usernameField.Text;
String password = passwordField.Text;
DataTable table = new DataTable();
MySqlDataAdapter adapter = new MySqlDataAdapter();
MySqlCommand command = new MySqlCommand("SELECT * From tbl_user WHERE `username` = @uname and `user_password` = @pwd", database.getConnection());
command.Parameters.Add("uname", MySqlDbType.VarChar).Value = username;
command.Parameters.Add("pwd", MySqlDbType.VarChar).Value = password;
adapter.SelectCommand = command;
adapter.Fill(table);
if (!checkInputFields())
{
if (username.ToLower().Trim().Equals("") || password.Trim().Equals(""))
{
/*Please Enter Username or Password*/
MessageBox.Show("Please Enter Username or Password!", "", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
}
else if (table.Rows.Count > 0)
{
/*Login Success for Admin*/
if (!checkIfAdmin()) {
MessageBox.Show("Admin Login Successful!", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.Hide();
HomeAdmin admin = new HomeAdmin();
admin.ShowDialog();
}
else
{
/*Login Success for user*/
MessageBox.Show("User Login Successful!", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.Hide();
HomePlayer user = new HomePlayer();
user.ShowDialog();
}
}
else
{
/*Login Error No Username*/
if (username.Trim().Equals(""))
{
MessageBox.Show("Please Enter Your Username", "", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
}
/*Login Error No password*/
else if (password.Trim().Equals(""))
{
MessageBox.Show("Please Enter Your Password", "", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
}
else
{
/*Login Error Wrong Username or password*/
MessageBox.Show("Username or Password is incorrect", "", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
}
}
}
else
{
MessageBox.Show("Please Enter all your details", "", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
}
}
/*Check All Fields Have Inputs*/
public Boolean checkInputFields()
{
String username = usernameField.Text;
String password = passwordField.Text;
if (username.ToLower().Trim().Equals("username") || password.ToLower().Trim().Equals("password"))
{
return true;
}
else
{
return false;
}
}
public Boolean checkIfAdmin()
{
Connect database = new Connect();
MySqlCommand command = new MySqlCommand("SELECT user_isAdmin From tbl_user WHERE userID = userID", database.getConnection());
command.Connection.Open();
bool isAdmin = (bool)command.ExecuteScalar();
if (isAdmin)
{
return true;
}
else
{
return false;
}
}
它到达调用 checkIfAdmin 的部分:
if (!checkIfAdmin()) {
MessageBox.Show("Admin Login Successful!", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.Hide();
HomeAdmin admin = new HomeAdmin();
admin.ShowDialog();
}
else
{
/*Login Success for user*/
MessageBox.Show("User Login Successful!", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.Hide();
HomePlayer user = new HomePlayer();
user.ShowDialog();
}
这是 checkIfAdmin:
public Boolean checkIfAdmin()
{
Connect database = new Connect();
MySqlCommand command = new MySqlCommand("SELECT user_isAdmin From tbl_user WHERE userID = userID", database.getConnection());
command.Connection.Open();
bool isAdmin = (bool)command.ExecuteScalar();
if (isAdmin)
{
return true;
}
else
{
return false;
}
}
目前它只返回 true 表示所有用户都是管理员,即使他们认为他们不是。 我想知道的是如何根据他们是否是管理员来选择 user_isAdmin 值。如果他们是管理员,调用 checkIsAdming 将运行:
MessageBox.Show("Admin Login Successful!", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.Hide();
HomeAdmin admin = new HomeAdmin();
admin.ShowDialog();
而用户会运行:
MessageBox.Show("User Login Successful!", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.Hide();
HomePlayer user = new HomePlayer();
user.ShowDialog();
【问题讨论】:
-
tbl_user中的纯文本密码,未散列密码?真的吗?不要那样做。请。因为网络蠕虫。阅读密码哈希。 -
目的不是为了一个真正的公共网站,它只是一个用于评估的本地游戏
-
我不想让事情变得复杂,只是为我自己的用户提供一个简单的注册表单,这样我就可以创建多个用户
-
WHERE userID = userID总是正确的 -
"SELECT user_isAdmin From tbl_user WHERE userID = userID"没有为userID使用变量。您不应该先从username中查找id,然后将该id 作为参数传递给此select 语句吗?
标签: c# mysql visual-studio winforms