#mysql #ruby
#mysql #ruby
Вопрос:
Я пытаюсь создать простую систему аутентификации пользователя в командной строке на Ruby.
Я использую MySQL для хранения пользовательской информации.
Я решил сохранить пароли в виде хэшей MD5, главным образом потому, что это просто.
На данный момент я не собираюсь делать что-то безумно безопасное, я просто хочу, чтобы это работало.
Однако, когда я использую оператор select в Ruby для извлечения хэша, чтобы я мог сравнить его с хэшем того, что ввел пользователь, он не отображается в том же формате из 32 символов!
Когда я использую MySQL для выбора хэша, я получаю:
SELECT password FROM users WHERE username = 'admin';
----------------------------------
| password |
----------------------------------
| d456c1f6fa85ed2f6a26b15139c6ddc2 |
----------------------------------
Однако, когда я использую Ruby..
con.query("SELECT password FROM users WHERE username = 'admin'")
#<Mysql::Result:0x950b208>
Я никогда раньше ничего толком не программировал, и мне действительно нравится Ruby.
Я гуглю это уже два дня и, похоже, ничего не могу найти.
Прошу прощения, если это действительно простое решение, но, похоже, я нигде не могу его найти.
Я также хотел бы получить предложения о лучшем способе реализации этого небольшого проекта! Заранее спасибо 🙂
Комментарии:
1. Кстати, у вас есть
FROM users
в одном запросе иFROM employee
в другом (хотя проблема не в этом).
Ответ №1:
Похоже, вам нужно просто обработать результаты запроса. Возвращаемое значение query
является объектом результирующего набора:
rows = con.query("SELECT password FROM employee WHERE username = 'admin'")
rows.each do |row|
puts row[0]
end
Комментарии:
1. @Phrogz: Это хороший момент; кажется разумным использовать уникальные имена пользователей. В противном случае это было бы немного проблематично.
2. @Phrogz: Основываясь на выводе
con.query
команды, я думаю, что оригинальный poster используетmysql
gem, который не поддерживает вызовfirst
в результирующем наборе. Для меняcon.query("...").fetch_row[0]
работает, хотя. (Похоже, что использованиеruby-mysql
драгоценного камня позволяет вам вызыватьfirst[0]
).
Ответ №2:
Попробуйте
rows.map(amp;:password)
это тоже должно сработать.