可以';t在将我的mvc网站发布到Web托管服务后登录

本文关键字:Web 登录 服务 网站 mvc 我的 可以 | 更新日期: 2023-09-27 18:19:28

我最近在一个网络托管服务上发布了一个asp.net MVC网站。几乎所有的东西都很好,我从msSQL数据库中得到的信息都显示在页面上等等。但有一个问题。当我尝试登录我的网站时,它不会起作用。在我进一步解释之前,您必须查看以下代码,这是我如何验证用户登录的:

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。

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

这让我发疯了,我真的很感激你的帮助。

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

发现问题:我尝试使用非哈希密码创建用户,并从密码的AuthenticateLogin中删除了.GetHashCode.ToString()。然后我重新出版了。它有效。问题在于散列。

我该如何解决这个问题?我需要数据库中的散列密码。。。

可以';t在将我的mvc网站发布到Web托管服务后登录

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

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

有关更多信息,请单击此处!

我使用自定义的Hashing类解决了我的问题。