You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于分层架构实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:50:32