-1

以下是我的 JS 代码

$("#submitPassword").click(function () {
                $.ajax({
                    type: "POST",
                    url: "@Url.Action("IsUserExist","Register")",
                    data: { emailOrPhone: $("#emailOrPhone").val(), password: $("#password").val() },
                    success:function(response){
                        if (response) {
                            alert("User Exist");
                        }
                        else alert("Doesn't exist");
                    }
                });
            });

以下是控制器端代码

public bool IsUserExist(string emailOrPhone,string password)
        {
            DBEntities db = new DBEntities();
            var q = from profile in db.Profiles
                    where profile.Email == emailOrPhone && profile.Password == password
                    select profile;
            if (q == null)
                return false;
            else
                return true;

        }

我的程序总是显示一个警告框,即“用户存在”,即使我输入了错误的密码。请告诉我什么问题

4

3 回答 3

1

如果没有结果,表达式仍将返回一个空枚举数。它不会返回 null。您需要查看有多少个结果的计数,并检查它是否至少为一个。

您还需要停止以纯文本形式存储密码。

如果您只想知道用户是否存在,只需查找用户名即可。如果您确实想登录,则需要查找或计算该特定用户的盐,使用该盐和密码生成哈希码(使用安全的哈希算法... md5 不计算在内),并且然后将其与密码字段中存储的值进行比较。当用户设置或更改其密码时,您使用相同的过程来保存新值。其他任何事情都是非常错误的。

于 2013-04-09T19:59:59.080 回答
0

在你的 if 条件下尝试这个改变 response.data 的响应

                         success:function(response){
                        if (response.data) {
                            alert("User Exist");
                        }
                        else alert("Doesn't exist");
                    }
于 2013-04-09T18:57:30.037 回答
0

比较对 JavaScript 中字符串的响应:

if (response == "True") {
     alert("User Exist");
} else if(response == "False") {...

因为 bool 控制器返回“False”或“True”,我敢打赌,JavaScript 会将其视为字符串,因此响应将始终被定义为 true。

下次尝试调试:首先,您的控制器 - 如果“q”为空,则返回空。很容易得出结论,问题出在 JavaScript 上。调试 JS,至少使用 console.log(response),你就会知道如何更改你的if语句。

于 2013-04-09T18:58:07.870 回答