RavenDB查询用户名和密码
本文关键字:密码 用户 查询 RavenDB | 更新日期: 2023-09-27 18:07:46
我对c#和RavenDB相当陌生,所以请原谅我的理解不足。
我目前有一个Windows窗体应用程序。在其中一个表单中,我有两个文本框和一个按钮。这两个文本框用作用户名和密码输入,按钮显然在那里,以便用户可以登录。当用户单击按钮时,调用一个方法并将两个输入的内容保存在两个字符串变量中。
目前,在我的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作为一种良好的安全实践,您根本不存储密码,而是存储密码的哈希值。
存储密码
-
读取服务器上的值并生成密码的哈希码。你应该使用加密函数来生成哈希(例如通过SHA256)
-
在Raven DB中存储User类型的文档,包含用户名和散列密码
检查通过凭据的用户是否在数据库中
- 查询Raven DB并查找具有给定名称和密码哈希值的用户
var user = session.Query<User>()
.Where(u => u.UserName == "Alice" && u.HashedPassword == "hashPwd");