在MySQL存储bcrypt哈希密码遇阻,WPF添加用户功能故障求助
解决WPF添加用户时bcrypt哈希存储MySQL失败的问题
看起来你现在卡在添加用户的功能上了,不管是哈希还是未哈希的密码都存不进数据库,而且还没错误提示——先别着急,咱们一步步排查:
第一步:先加异常捕获,搞清楚到底哪里错了
你现在的代码直接弹成功提示,但实际没写入,大概率是有异常被吞了。先给按钮点击事件加上try-catch,把错误信息打出来,这样能定位问题:
private void btnAdd_Click(object sender, RoutedEventArgs e) { // 先验证输入不为空 if (string.IsNullOrWhiteSpace(tbUsername.Text) || string.IsNullOrWhiteSpace(tbPassword.Text)) { MessageBox.Show("Gebruikersnaam en wachtwoord mogen niet leeg zijn!"); return; } try { clsDB cdb = new clsDB(); // 先做bcrypt哈希(记得先装BCrypt.Net-Next的NuGet包!) string hashedPassword = BCrypt.Net.BCrypt.HashPassword(tbPassword.Text); cdb.Adduser(tbUsername.Text, hashedPassword); MessageBox.Show("user toegevoegd!"); } catch (Exception ex) { MessageBox.Show($"Fout bij toevoegen gebruiker: {ex.Message}"); // 也可以把详细错误输出到调试窗口,方便排查 System.Diagnostics.Debug.WriteLine(ex.ToString()); } }
第二步:检查clsDB.Adduser方法的实现
问题大概率出在这个数据库操作方法里,一定要用参数化查询(避免SQL注入,同时防止特殊字符导致的语法错误),还要确保哈希后的密码能存进数据库:
public void Adduser(string username, string hashedPassword) { // 替换成你的MySQL连接字符串 string connectionString = "server=localhost;database=jouw_db;user=jouw_user;password=jouw_wachtwoord;"; using (MySqlConnection conn = new MySqlConnection(connectionString)) { conn.Open(); // 注意:users表的password字段必须设为VARCHAR(60)或者更长,因为bcrypt哈希固定是60字符 string query = "INSERT INTO users (username, password) VALUES (@Username, @Password)"; using (MySqlCommand cmd = new MySqlCommand(query, conn)) { cmd.Parameters.AddWithValue("@Username", username); cmd.Parameters.AddWithValue("@Password", hashedPassword); int rowsAffected = cmd.ExecuteNonQuery(); // 如果没有行被影响,说明插入失败 if (rowsAffected == 0) { throw new Exception("Geen gegevens toegevoegd. Controleer de query en database instellingen."); } } } }
第三步:几个关键检查点
- NuGet包是否安装:确保你已经安装了
BCrypt.Net-Next(或者BCrypt.Net),不然哈希方法会报错。 - 数据库表结构:
password字段的长度必须≥60,bcrypt哈希后的字符串固定是60字符,长度不够会截断导致存储失败。另外如果username字段设了唯一约束,重复的用户名也会插入失败。 - 数据库权限:连接数据库的用户必须有
INSERT权限,不然会被拒绝写入。 - 连接字符串正确性:确认服务器地址、数据库名、用户名密码都没错,能不能正常连接到MySQL。
先按这几步排查,把异常信息搞出来,基本上就能定位问题所在了。
内容的提问来源于stack exchange,提问作者acesteef
相关产品推荐
相关产品推荐

