RavenDB查询用户名和密码

本文关键字:密码 用户 查询 RavenDB | 更新日期: 2023-09-27 18:07:46

我对c#和RavenDB相当陌生,所以请原谅我的理解不足。

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

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

如何正确检查用户给出的用户名和密码是否存在于数据库中?

RavenDB查询用户名和密码

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

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

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

存储密码

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

  2. 在Raven DB中存储User类型的文档,包含用户名和散列密码

检查通过凭据的用户是否在数据库中

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

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