【问题标题】:RavenDB Querying to check Username and PasswordRavenDB 查询以检查用户名和密码
【发布时间】:2011-11-12 03:25:54
【问题描述】:

我对 C# 和 RavenDB 还很陌生,所以请原谅我的理解不足。

我目前有一个 Windows 窗体应用程序。在其中一种形式中,我有两个文本框和一个按钮。这两个文本框用作用户名和密码输入,按钮显然在那里,以便用户可以登录。当用户点击按钮时,会调用一个方法并将两个输入的内容保存在两个字符串变量中。

目前,在我的 RavenDB 数据库中,我创建了两个用户名和密码示例。

如何正确检查用户提供的用户名和密码是否存在于数据库中。

非常感谢任何帮助。

【问题讨论】:

    标签: c# passwords ravendb


    【解决方案1】:

    有两种方法可以回答这个问题。

    a) 您可以使用 Linq 提供程序查询多个属性

    session.Query<User>().Where(user=> user.Name = username && user.Password = pass).ToList();
    

    b) 这样做的问题是假设您将密码作为纯文本存储在数据库中,而您应该永远不要这样做。 您可以在 RaccoonBlog 的 RavenDB 示例应用程序中看到我们是如何实现它的:

    https://github.com/ayende/RaccoonBlog/blob/master/src/RaccoonBlog.Web/Models/User.cs

    https://github.com/ayende/RaccoonBlog/blob/master/RaccoonBlog.Web/Areas/Admin/Controllers/LoginController.cs

    【讨论】:

      【解决方案2】:

      作为良好的安全实践,您根本不存储密码,而是存储密码的哈希值。

      存储您的密码

      1. 读取服务器上的值并生成密码的哈希码。您应该使用加密函数来生成哈希(例如通过SHA256

      2. 在 Raven DB 中使用用户名和哈希密码存储用户类型的文档

      检查具有传递凭据的用户是否在数据库中

      1. 查询 Raven DB 并查找具有给定名称和密码哈希的用户。

      示例代码

      var user = session.Query<User>()
          .Where(u => u.UserName == "Alice" && u.HashedPassword == "hashPwd");
      

      【讨论】:

      • 我不知道在这种情况下如何开始。我有一个名为:UserLogin.cs 的类,其中有两个属性;用户名和密码。目前,有两个 UserLogin,每个都有一个用户名和密码。在这种情况下,我该怎么做才能让一切正常工作?
      • @Subby,检查 Ayende 发布的链接。您应该有两个类,第一个将保存数据(据我所知,您的 UserLogin,最好将其重命名为 User),第二个实际进行身份验证,例如 LoginController
      猜你喜欢
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 2016-09-24
      • 2013-02-21
      相关资源
      最近更新 更多