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

如何在ASP.NET Core Web API中实现邮箱大小写不敏感登录

修复邮箱大小写敏感的登录问题

由于无法修改数据库的大小写设置,我们可以在代码层面统一邮箱格式,确保无论用户输入何种大小写形式,都能匹配到数据库中存储的全小写邮箱:

具体修改方案

  • 在查询用户前,将用户输入的邮箱转换为全小写格式,保证查询条件与数据库存储格式一致
  • 若密码哈希过程依赖邮箱(你的VerifyHashedPassword方法传入了email参数),验证密码时也要使用转换后的小写邮箱,避免哈希验证失败

修改后的代码

public async Task<User> Login(string? email, string? password)
{
    if (string.IsNullOrWhiteSpace(password) || string.IsNullOrWhiteSpace(email))
    {
        throw new ClientError("Email and password required.");
    }

    // 统一转换为小写并去除前后空白
    var normalizedEmail = email.Trim().ToLowerInvariant();
    var user = await ValidateUser(normalizedEmail, password);

    return user ?? throw new ClientError("Invalid email or password.");
}

private async Task<User?> ValidateUser(string normalizedEmail, string password)
{
    // 使用统一格式的邮箱查询用户
    var user = await _queries
        .GetByEmail(normalizedEmail)
        .FirstOrDefaultAsync();

    if (user == null)
    {
        return null; // Email does not exist.
    }

    // 验证密码时传入统一后的邮箱(匹配哈希逻辑的输入格式)
    var passwordIsCorrect = _hashUtil.VerifyHashedPassword(
        email: normalizedEmail,
        password: password,
        hash: user.Password
        );

    if (passwordIsCorrect)
    {
        return user; 
    }

    return null;
}

细节说明

  • 使用ToLowerInvariant()而非ToLower(),避免因系统区域设置差异导致的大小写转换错误
  • 先调用Trim()去除邮箱前后空白,避免用户输入带空格的邮箱导致查询失败

内容的提问来源于stack exchange,提问作者Convert.ToInt32

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:01:12