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

用户凭据验证函数始终判定为true问题及相关代码求助

问题排查:凭据验证函数始终返回True的原因及修复方案

咱们直接拆解问题核心——你的验证逻辑犯了一个典型的逻辑错误,导致不管用户输入的凭据是否属于同一个用户,都可能通过验证。

问题根源分析

你当前的代码是分开查询数据库中是否存在匹配输入邮箱的用户,以及是否存在匹配输入密码的用户,这两个查询完全独立:

  • 只要数据库里有任何一个用户的邮箱和你输入的emai(注意这里参数名拼错了,应该是email)匹配,email变量就不为null
  • 只要数据库里有任何一个用户的密码和你输入的pass匹配,password变量就不为null

举个极端例子:数据库里有用户A(邮箱a@test.com,密码123)和用户B(邮箱b@test.com,密码456),当你输入邮箱a@test.com、密码456时,email会查到用户A(不为null),password会查到用户B(不为null),这时候你的条件(email == null) || (password == null)就不成立,直接跳转到About页面——这显然不是正确的凭据验证逻辑。


修复方案

1. 修正核心验证逻辑

正确的做法是查询是否存在一个同时匹配输入邮箱和密码的用户,确保是同一个用户的凭据正确。修正后的代码如下:

public ActionResult Authorize(string email, string pass) { 
    using (WorkFlowContext db = new WorkFlowContext()) { 
        // 关键:同时匹配邮箱和密码,定位到唯一用户
        var validUser = db.User.FirstOrDefault(x => x.Email_Address == email && x.Password == pass); 

        if (validUser == null) { 
            ViewBag.Message = "The email or password is incorrect."; 
            return View("Index"); 
        } else { 
            return RedirectToAction("About", "Home"); 
        } 
    } 
}

2. 修复参数拼写错误

你原来的参数名是emai(少了一个l),虽然代码里后续重新赋值了var email = ...,但这种拼写错误很容易引发其他隐性问题,建议直接把参数名改成email,和数据库字段命名保持一致。

3. 重要安全提醒:禁止存储明文密码!

必须强调:直接在数据库中存储明文密码是严重的安全漏洞,完全不符合行业规范。正确的做法是存储密码的哈希值,验证时对用户输入的密码进行相同的哈希运算,再和数据库中的哈希值比对。比如使用ASP.NET自带的PasswordHasher类:

// 注册用户时存储哈希密码
var hashedPassword = new PasswordHasher().HashPassword(pass);
// 将hashedPassword存入数据库的Password字段

// 验证凭据时
var user = db.User.FirstOrDefault(x => x.Email_Address == email);
if (user == null) {
    ViewBag.Message = "The email or password is incorrect.";
    return View("Index");
}
var verificationResult = new PasswordHasher().VerifyHashedPassword(user.Password, pass);
if (verificationResult == PasswordVerificationResult.Failed) {
    ViewBag.Message = "The email or password is incorrect.";
    return View("Index");
}
// 验证通过,跳转页面
return RedirectToAction("About", "Home");

总结

你的核心问题是拆分了邮箱和密码的查询逻辑,导致跨用户的匹配也能通过验证,只要合并查询条件、确保同时匹配同一用户的邮箱和密码,就能解决“始终返回True”的问题。同时别忘了修复拼写错误,以及升级密码存储的安全方式。

内容的提问来源于stack exchange,提问作者JOHAN FERNANDEZ DECENA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:20:08