将其发布到Web托管服务

时间:2015-10-27 09:46:26

标签: c# asp.net-mvc visual-studio-2015 .net-4.5

我有一个asp.net MVC网站,我最近在网络托管服务上发布。几乎所有东西都很好用,我从msSQL db获得的信息显示在页面等等上。但是有一个问题。当我尝试登录我的网站时,它将无法正常工作。在我进一步解释之前,您将需要查看以下代码,即我对用户登录进行身份验证的方式:

public ActionResult Login()
{
    return View();
}

[HttpPost, ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model)
{
    if (ModelState.IsValid)
    {

        if (Repository.AuthenticateLogin(model.Username, model.Password.GetHashCode().ToString()))
        {
            FormsAuthentication.SetAuthCookie(model.Username, false);
            return RedirectToAction("Index", "Home");
        }
        else
        {
            TempData["WrongLogin"] = "The username or password you've entered is wrong. Please try again!";
            return View(model);
        }
    }
    else
    {
        return View(model);
    }
}

上面if语句中使用的方法“AuthenticateLogin(字符串用户名,字符串密码)如下所示:

public static bool AuthenticateLogin(string username, string password)
    {
        using (var context = new SHultEntities())
        {
            return (from u in context.User
                    where u.Username == username && u.Password == password
                    select u).Any();
        }
    }

现在,正如您所看到的,为了对用户进行身份验证,我正在检查输入的用户名和密码,以对照数据库用户表中的任何用户。如果匹配,则该方法返回“true”,否则返回“false”。是的,你明白了。

嗯,问题是,当我尝试登录我的网站时,我得到TempData [“WrongLogin”]文本,这意味着我的AuthenticateLogin方法必须返回false,这意味着一定不能有任何匹配。但是当我在计算机上的本地项目上尝试使用相同的用户名和密码时,AuthenticateLogin返回true。

如果问题是与数据库的连接,我从数据库中检索的标题和内容将不会出现在网站上。但确实如此。此外,当我从本地项目更新某些内容然后访问我的网站时,会显示更新的信息。所以,唯一的问题是我无法登录。

这让我发疯,我真的很感激一些帮助。

编辑:值得一提的是,我必须登录我的网站编辑任何内容/信息。这就是为什么我提到我可以登录并更改我的本地项目,然后更改出现在网站上。

FOUND PROBLEM:我尝试使用非哈希密码创建用户,并从密码的AuthenticateLogin中删除.GetHashCode.ToString()。然后我重新发表。有用。问题是散列。

我该如何解决这个问题?我需要db中的哈希密码...

2 个答案:

答案 0 :(得分:2)

您是如何在数据库中播种用户名和密码的?如果password.GetHashCode()的实现是特定于机器的(即依赖于机器特定的盐),那么这可能是它无法与任何用户匹配的原因。另一方面,如果用户是通过远程(托管)环境创建的,这应该不是问题。

答案 1 :(得分:0)

问题是由我的哈希造成的。 Apprenatly,两个看起来完全相同的字符串在散列时可以产生不同的值,在不同的机器上使用 .GetHashCode()的标准框架实现(即使机器使用相同版本的框架) 。

有关详细信息,请click here!

我通过使用自定义的哈希类解决了我的问题。