2011-05-02 83 views
2

我想在Ruby中製作一個簡單的命令行用戶認證系統。
我正在使用MySQL來存儲用戶信息。
我決定將密碼存儲爲MD5哈希值,主要是因爲它很簡單。
我現在不想做任何瘋狂的安全工作,我只是想讓它工作。
但是,當我在Ruby中使用select語句將哈希拉出來以便我可以將它與用戶輸入的哈希進行比較時,它不會以相同的32字符格式出現!使用MySQL選擇顯示Mysql :: Result,而不是我的值

當我使用MySQL來選擇哈希我得到:

SELECT password FROM users WHERE username = 'admin'; 
+----------------------------------+ 
| password       | 
+----------------------------------+ 
| d456c1f6fa85ed2f6a26b15139c6ddc2 | 
+----------------------------------+ 

當我使用Ruby但..

con.query("SELECT password FROM users WHERE username = 'admin'") 
#<Mysql::Result:0x950b208> 

我還沒有真正過過編程任何事情,真的很享受紅寶石。
我一直在谷歌搜索這兩天了,似乎無法找到任何東西。
對不起,如果這是一個非常簡單的修復,但我似乎無法找到任何地方。
我也喜歡關於更好的方式去關於這個小項目的建議!在此先感謝:)

+0

你有一個查詢中的'FROM用戶'和另一個'FROM僱員'(儘管這不是問題)。 – 2011-05-02 23:41:42

回答

4

它看起來像你需要處理查詢的結果。的query返回值是一個結果集對象:

rows = con.query("SELECT password FROM employee WHERE username = 'admin'") 
rows.each do |row| 
    puts row[0] 
end 
+0

@Progrog:這是一個好點;假設唯一的用戶名似乎是合理的。否則會有點問題。 – 2011-05-03 02:10:00

+0

@Progro:基於'con.query'命令的輸出,我認爲原始的海報使用'mysql' gem,它不支持在結果集上調用'first'。對我來說,'con.query(「...」)。fetch_row [0]'有效。 (看起來,使用'ruby-mysql' gem確實可以讓你調用'first [0]')。 – 2011-05-03 03:13:24

+0

感謝您的幫助!這工作完美。 – horuden 2011-05-03 05:38:35

0

嘗試

rows.map(&:password) 

,應該工作了。