Выбор с использованием MySQL показывает Mysql:: результат, а не мое значение

#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) 
  

это тоже должно сработать.