2017-12-08 26 views
0

Rubyを使用している私のコードにいくつかの問題があります。ターミナルプログラムのためだけに、ウェブサイトや何もない。Ruby |ファイルと比較してパスワードを確認しようとしています

私のコードでは、ユーザーがログインを作成するようにします。その後、私はログインするユーザーを持っていますが、パスワードやユーザー名が正しいかどうかを確認する方法を見つけることはできません。

プログラムはユーザーがユーザー名/パスワードとして入力したものとファイル(userdatabase)とを比較する必要があります。私はそれが正しいと思います。

今私は入力がユーザーのデータベースでは、whileループを使用して見つからない場合、私は停止しようとしているが、私はその作業を行うことはできません。

コード:

puts "What will be your user name?" 

username = gets.chomp

puts "What will be your password?" 

password = gets.chomp 

puts "Please repeat your password." 

passwordsafe = gets.chomp 



f = File.new("student.txt", "w+") 
f.puts username + ";" + password + ";" + passwordsafe 
f.close 

puts "well done, you have created a new user." 

lines = IO.readlines("student.txt") 
lines.each{|line| print(line)} 


puts "now you need to login." 
puts "What is your username?" 
username = gets.chomp 

File.open("student.txt") do |f| 
    f.any? do |line| 
    while line.include?(username) 
    end 
end 

elsif puts "Sorry your username was incorrect" 
end 

#lines = IO.readlines("student.txt") 
#lines.each{|line| (line)} 

puts "what is your password?" 
password = gets.chomp 
+2

あなたがパスワードについて学習している場合は、[安全なパスワードハッシュ](httpsを学ぶ時間です:// githubの。 com/codahale/bcrypt-ruby)を実行します。 – tadman

答えて

0

whileは不要です。現在、このような

名チェック:

File.open("student.txt").each_line.any? do |line| 
    line.include?(username) 
end 

またはこのような単一の行に崩壊:

File.open("student.txt") do |f| 
    f.any? do |line| 
    while line.include?(username) 
    end 
end 

は、このようなことでした

File.open("student.txt").each_line.any?{ |l| l.include?(username) } 

上のドキュメントをチェックany?メソッドを使用して、期待していることを理解してください。http://ruby-doc.org/core-2.4.2/Enumerable.html#method-i-any-3F構文エラーの残りの部分については、私はあなたにそれらを任せる

;)

+0

ああ、私は 'elsif'を削除したので、今はうまくいくようです。しかし、私の問題は、私はそれが戻って、再度データベースにない場合、ユーザー名を尋ねることです - どのように私はそれを行うのですか? – Learner

関連する問題