基于分层架构实现SQL Server用户登录验证方案咨询
实现登录验证功能的步骤
按照你现有注册功能的架构,我们可以分以下几步完成登录验证:
1. 创建登录验证的存储过程
首先在SQL Server中创建一个用于验证用户邮箱和密码的存储过程:
CREATE PROCEDURE spPeople_ValidateLogin @Email NVARCHAR(255), @Password NVARCHAR(255) AS BEGIN SET NOCOUNT ON; -- 查询匹配邮箱和密码的用户信息 SELECT Id, FirstName, LastName, Email FROM People WHERE Email = @Email AND Password = @Password; END
2. 在类库的SqlConnector中添加登录验证方法
在你的SqlConnector类中新增一个ValidateUser方法,封装数据库连接和验证逻辑:
public UserModel ValidateUser(string email, string password) { using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(GlobalConfig.CnnString("MasterChef"))) { var parameters = new DynamicParameters(); parameters.Add("@Email", email); parameters.Add("@Password", password); // 使用Dapper的QueryFirstOrDefault获取匹配的用户,无匹配则返回null return connection.QueryFirstOrDefault<UserModel>( "spPeople_ValidateLogin", parameters, commandType: CommandType.StoredProcedure ); } }
3. 调整UserModel类(必要操作)
由于Dapper需要通过无参构造函数映射查询结果,在UserModel中添加一个无参构造函数:
// 新增无参构造函数 public UserModel() { } // 保留原有的注册用构造函数 public UserModel(string firstName, string lastName, string email, string createPassword) { FirstName = firstName; LastName = lastName; Email = email; CreatePassword = createPassword; }
4. 登录表单的实现
在登录表单中编写输入验证和调用类库方法的代码:
private void loginButton_Click(object sender, EventArgs e) { if (ValidateLoginInput()) { string inputEmail = emailLoginTextBox.Text.Trim(); string inputPassword = passwordLoginTextBox.Text; // 调用类库中的验证方法 UserModel authenticatedUser = GlobalConfig.Connection.ValidateUser(inputEmail, inputPassword); if (authenticatedUser != null) { MessageBox.Show($"登录成功!欢迎回来,{authenticatedUser.FirstName}"); // 这里可以跳转到主界面或执行其他登录后的逻辑 } else { MessageBox.Show("邮箱或密码错误,请重试"); } } else { MessageBox.Show("请填写完整的邮箱和密码"); } } // 验证登录表单输入 private bool ValidateLoginInput() { return !string.IsNullOrWhiteSpace(emailLoginTextBox.Text) && !string.IsNullOrWhiteSpace(passwordLoginTextBox.Text); }
重要提示
当前你的代码中直接存储明文密码,这在生产环境中存在严重安全风险。建议在注册时对密码进行哈希处理(例如使用BCrypt、SHA256加盐),登录时再对输入的密码进行相同哈希后与数据库中的哈希值比对。
内容的提问来源于stack exchange,提问作者jlacour
相关产品推荐
相关产品推荐

