Запрос RavenDB для проверки имени пользователя и пароля - PullRequest
1 голос
/ 07 сентября 2011

Я довольно новичок в C # и RavenDB, поэтому, пожалуйста, извините за отсутствие понимания.

В настоящее время у меня есть приложение Windows Form. В одной из форм у меня есть два текстовых поля и одна кнопка. Эти два текстовых поля служат для ввода имени пользователя и пароля, и кнопка, очевидно, находится там, чтобы пользователь мог войти в систему. Когда пользователь нажимает кнопку, вызывается метод, который сохраняет содержимое двух входных данных в двух строковых переменных.

На данный момент в моей базе данных RavenDB я создал два образца имени пользователя и пароля.

Как правильно проверить, существуют ли имя пользователя и пароль, данные от пользователя, в базе данных.

Любая помощь очень ценится.

Ответы [ 2 ]

6 голосов
/ 07 сентября 2011

Есть два способа ответить на этот вопрос.

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

3 голосов
/ 07 сентября 2011

В целях безопасности вы не храните пароли вообще, а хеши паролей.

Для хранения пароля

  1. Считайте значения на сервере и сгенерируйте хеш-код пароля.Вы должны использовать криптографические функции для генерации хеша (например, через SHA256 )

  2. Хранить документ в БД Raven типа User с его именем пользователя и хэшированным паролем

Чтобы проверить, находится ли пользователь с переданными учетными данными в базе данных

  1. Query Raven DB и найдите пользователя симя и пароль хэш.

Пример кода

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